[
https://issues.jenkins-ci.org/browse/JENKINS-13466?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=161648#comment-161648
]
gbois commented on JENKINS-13466:
---------------------------------
I think environment variables defined in node properties are not available in
AbstractBuild.getEnvironment(TaskListener) method.
I think it doesn't work in your use case because you have maybe created your
own launcher.
Therefore, the following code is not available
for (NodeProperty nodeProperty:
Hudson.getInstance().getGlobalNodeProperties()) {
Environment environment =
nodeProperty.setUp(AbstractBuild.this, l, listener);
if (environment != null) {
buildEnvironments.add(environment);
}
}
for (NodeProperty nodeProperty:
Computer.currentComputer().getNode().getNodeProperties()) {
Environment environment =
nodeProperty.setUp(AbstractBuild.this, l, listener);
if (environment != null) {
buildEnvironments.add(environment);
}
}
located in AbstractBuild#createLauncher() method
A better alternative is to use the great EnvInject plugin :)
With it, in your SCM code, just get the EnvInjectAction and its captured
environment variables (used in my forked SCM clearcase plugin).
> 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: scm-sync-configuration
> Environment: not applicable
> Reporter: Robin Jarry
> Assignee: Frédéric Camblor
> Labels: envinronment-variables, polling
> 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