Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[FIXED JENKINS-7442] Fix expansion of EnvVars in ant properties.
Ant build step had quite a mix: buildFile and antOpts expanded against
env, properties against buildVariables, and targets against both.
Now merging buildVariables into env and applying to all.

Originally-Committed-As: 5f1fef602c6a5672df6edcc84c73c47ff70bb71b
  • Loading branch information
alanharder committed Feb 16, 2011
1 parent 6fd196e commit 8971063
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
6 changes: 3 additions & 3 deletions core/src/main/java/hudson/tasks/Ant.java
Expand Up @@ -141,6 +141,7 @@ public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListene
ArgumentListBuilder args = new ArgumentListBuilder();

EnvVars env = build.getEnvironment(listener);
env.overrideAll(build.getBuildVariables());

AntInstallation ai = getAnt();
if(ai==null) {
Expand All @@ -156,10 +157,9 @@ public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListene
args.add(exe);
}

VariableResolver<String> vr = build.getBuildVariableResolver();

VariableResolver<String> vr = new VariableResolver.ByMap<String>(env);
String buildFile = env.expand(this.buildFile);
String targets = Util.replaceMacro(env.expand(this.targets), vr);
String targets = env.expand(this.targets);

FilePath buildFilePath = buildFilePath(build.getModuleRoot(), buildFile, targets);

Expand Down
19 changes: 14 additions & 5 deletions test/src/test/java/hudson/tasks/AntTest.java
Expand Up @@ -26,6 +26,10 @@
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import hudson.matrix.Axis;
import hudson.matrix.AxisList;
import hudson.matrix.MatrixRun;
import hudson.matrix.MatrixProject;
import hudson.model.Cause.UserCause;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
Expand Down Expand Up @@ -124,21 +128,25 @@ public void testSensitiveParameters() throws Exception {
public void testParameterExpansion() throws Exception {
// *_URL vars are not set if hudson.getRootUrl() is null:
((Mailer.DescriptorImpl)hudson.getDescriptor(Mailer.class)).setHudsonUrl("http://test/");
FreeStyleProject project = createFreeStyleProject();
// Use a matrix project so we have env stuff via builtins, parameters and matrix axis.
MatrixProject project = createMatrixProject("test project"); // Space in name
project.setAxes(new AxisList(new Axis("AX", "is")));
project.addProperty(new ParametersDefinitionProperty(
new StringParameterDefinition("FOO", "bar", "")));
project.setScm(new ExtractResourceSCM(getClass().getResource("ant-job.zip")));
project.getBuildersList().add(new Ant("", null, null, null,
"vNUM=$BUILD_NUMBER\nvID=$BUILD_ID\nvJOB=$JOB_NAME\nvTAG=$BUILD_TAG\nvEXEC=$EXECUTOR_NUMBER\n"
+ "vNODE=$NODE_NAME\nvLAB=$NODE_LABELS\nvJAV=$JAVA_HOME\nvWS=$WORKSPACE\nvHURL=$HUDSON_URL\n"
+ "vBURL=$BUILD_URL\nvJURL=$JOB_URL\nvHH=$HUDSON_HOME\nvJH=$JENKINS_HOME\nvFOO=$FOO"));
FreeStyleBuild build = project.scheduleBuild2(0, new UserCause()).get();
assertBuildStatusSuccess(build);
+ "vBURL=$BUILD_URL\nvJURL=$JOB_URL\nvHH=$HUDSON_HOME\nvJH=$JENKINS_HOME\nvFOO=$FOO\nvAX=$AX"));
assertBuildStatusSuccess(project.scheduleBuild2(0, new UserCause()));
MatrixRun build = project.getItem("AX=is").getLastBuild();
String log = getLog(build);
assertTrue("Missing $BUILD_NUMBER: " + log, log.contains("vNUM=1"));
assertTrue("Missing $BUILD_ID: " + log, log.contains("vID=2")); // Assuming the year starts with 2!
assertTrue("Missing $JOB_NAME: " + log, log.contains(project.getName()));
assertTrue("Missing $BUILD_TAG: " + log, log.contains("vTAG=hudson-" + project.getName() + "-1"));
// Odd build tag, but it's constructed with getParent().getName() and the parent is the matrix
// configuration, not the project.. if matrix build tag ever changes, update expected value here:
assertTrue("Missing $BUILD_TAG: " + log, log.contains("vTAG=jenkins-AX=is-1"));
assertTrue("Missing $EXECUTOR_NUMBER: " + log, log.matches("(?s).*vEXEC=\\d.*"));
// $NODE_NAME is expected to be empty when running on master.. not checking.
assertTrue("Missing $NODE_LABELS: " + log, log.contains("vLAB=master"));
Expand All @@ -150,5 +158,6 @@ public void testParameterExpansion() throws Exception {
assertTrue("Missing $HUDSON_HOME: " + log, log.matches("(?s).*vHH=[^\\r\\n].*"));
assertTrue("Missing $JENKINS_HOME: " + log, log.matches("(?s).*vJH=[^\\r\\n].*"));
assertTrue("Missing build parameter $FOO: " + log, log.contains("vFOO=bar"));
assertTrue("Missing matrix axis $AX: " + log, log.contains("vAX=is"));
}
}

0 comments on commit 8971063

Please sign in to comment.