[ 
https://issues.jenkins-ci.org/browse/JENKINS-13466?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=161802#comment-161802
 ] 

gbois commented on JENKINS-13466:
---------------------------------

The issue is not a bug but a design issue.
EnvironmentVariablesNodeProperty variables are computed at the launcher 
creation and it is not possible to compute them in another way.

At the moment, my proposal solution is to add a dependency to envinject-lib and 
use
EnvVarsResolver#resolveEnVars(build, this.viewName)

This method uses the variables injected by the EnvInject plugin if it is 
installed. If the plugin is not installed, all environment variables are 
computed (and EnvironmentVariablesNodeProperty are used).

The only incovenience is to tie your code with this library.
Hopefully, this solution should be suitable for you.
                
> Custom environment variables not available when build started by an SCM change
> ------------------------------------------------------------------------------
>
>                 Key: JENKINS-13466
>                 URL: https://issues.jenkins-ci.org/browse/JENKINS-13466
>             Project: Jenkins
>          Issue Type: Bug
>          Components: core, envinject
>         Environment: not applicable
>            Reporter: Robin Jarry
>            Assignee: gbois
>         Attachments: custom-env-master.jpg, custom-env-slave.jpg
>
>
> Hi there,
> I may have found a sneaky bug. Custom environment variables can be defined by 
> the user into the general & nodes config:
> !custom-env-master.jpg!
> !custom-env-slave.jpg!
> When a build is triggered by an SCM change, those variables are not available 
> for SCM plugins. 
> Let's say that I have a field in my SCM plugin configured with this value: 
> *$\{JOB_NAME\}\_$\{HOSTNAME}\_$\{NODE_TYPE\}* If the build is triggered by an 
> SCM change I get this error:
> {code}
> Started by an SCM change
> Building remotely on vmo426
> [ClearCase] ### Begin source code retrieval ###
> cleartool error: Illegal characters found in view name : ${NODE_TYPE}. An 
> environment variable may have not been resolved.
> Finished: FAILURE
> {code}
> Here is the code snipet from my plugin that does that:
> {code:Java}
> @Override
> public boolean checkout(AbstractBuild build, Launcher launcher, FilePath 
> workspace, 
>         BuildListener listener, File changelogFile) throws IOException, 
> InterruptedException
> {
>     try {          
>         logger.log("### Begin source code retrieval ###");
>         String resolvedViewName = 
> build.getEnvironment(listener).expand(this.viewName);
>         
>         Pattern pattern = Pattern.compile("(\\$\\{.+?\\})");
>         Matcher matcher = pattern.matcher(resolvedViewName);
>         if (matcher.find()) {
>             String message = "Illegal characters found in view name : %s. " +
>                     "An environment variable may have not been resolved.";
>             throw new ClearToolError(String.format(message, matcher.group()));
>         }
> {code}
> I removed *$\{NODE_TYPE\}* from my SCM configuration to let the build 
> continue. And the user custom environment variables seem to be injected into 
> the build environment after the SCM checkout. 
> {code}
> Started by an SCM change
> Building remotely on vmo426
> [ClearCase] ### Begin source code retrieval ###
> ...
> [ClearCase] === End source code retrieval ===
> [polling_linux] $ /bin/sh -xe /tmp/hudson7589128551511062241.sh
> + env
> ...
> NODE_TYPE=SLAVE
> ...
> {code}
> Could this be fixed? :)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.jenkins-ci.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to