diff --git a/src/main/java/se/diabol/jenkins/pipeline/PipelineVersionContributor.java b/src/main/java/se/diabol/jenkins/pipeline/PipelineVersionContributor.java index e2d9008ee..7f0f14d8d 100644 --- a/src/main/java/se/diabol/jenkins/pipeline/PipelineVersionContributor.java +++ b/src/main/java/se/diabol/jenkins/pipeline/PipelineVersionContributor.java @@ -34,6 +34,8 @@ import org.kohsuke.stapler.DataBoundConstructor; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -104,12 +106,18 @@ static void setVersion(AbstractBuild build, String version) { } else { build.replaceAction(action); } - build.replaceAction(getVersionParameterAction(version)); + build.replaceAction(getVersionParameterAction(build, version)); } // Backwards compatibility for 0.9.9 and older - private static ParametersAction getVersionParameterAction(String version) { + private static ParametersAction getVersionParameterAction(AbstractBuild build, String version) { ParameterValue value = new StringParameterValue(PipelineVersionContributor.VERSION_PARAMETER, version); + ParametersAction action = build.getAction(ParametersAction.class); + if (action != null) { + List parameters = new ArrayList(action.getParameters()); + parameters.add(value); + return new ParametersAction(parameters); + } return new ParametersAction(value); } diff --git a/src/test/java/se/diabol/jenkins/pipeline/PipelineVersionContributorTest.java b/src/test/java/se/diabol/jenkins/pipeline/PipelineVersionContributorTest.java index 96d1749e1..2a5cc2617 100644 --- a/src/test/java/se/diabol/jenkins/pipeline/PipelineVersionContributorTest.java +++ b/src/test/java/se/diabol/jenkins/pipeline/PipelineVersionContributorTest.java @@ -31,6 +31,9 @@ import hudson.model.ParametersDefinitionProperty; import hudson.model.StringParameterDefinition; import hudson.model.StringParameterValue; +import hudson.plugins.parameterizedtrigger.AbstractBuildParameters; +import hudson.plugins.parameterizedtrigger.BooleanParameterConfig; +import hudson.plugins.parameterizedtrigger.BooleanParameters; import hudson.tasks.BuildTrigger; import hudson.util.StreamTaskListener; import org.apache.commons.io.FileUtils; @@ -42,6 +45,7 @@ import org.jvnet.hudson.test.TestBuilder; import java.io.IOException; +import java.util.Arrays; import static org.junit.Assert.*; @@ -211,6 +215,40 @@ public void testWithBuildNameSetterPluginAndAdditionalParameters() throws Except assertEquals("1.0.0.1", b.getLastBuild().getBuildVariableResolver().resolve(PIPELINE_VERSION)); } + @Test + public void testVersionContributorIsNotBreakingParametersPassing() throws Exception { + FreeStyleProject firstProject = jenkins.createFreeStyleProject("firstProject"); + FreeStyleProject secondProject = jenkins.createFreeStyleProject("secondProject"); + firstProject.getPublishersList().add( + new BuildPipelineTrigger("secondProject", Arrays.asList(new BooleanParameters(Arrays.asList(new BooleanParameterConfig("test", true)))))); + firstProject.save(); + + firstProject.getBuildWrappersList().add(new PipelineVersionContributor(true, "1.0.0.${BUILD_NUMBER}")); + + firstProject.getBuildersList().add(new AssertPipelineVersion("1.0.0.1")); + secondProject.getBuildersList().add(new AssertNoPipelineVersion()); + + jenkins.setQuietPeriod(0); + jenkins.getInstance().rebuildDependencyGraph(); + jenkins.buildAndAssertSuccess(firstProject); + jenkins.waitUntilNoActivity(); + + assertNotNull(firstProject.getLastBuild()); + assertNull(secondProject.getLastBuild()); + assertEquals("1.0.0.1", firstProject.getLastBuild().getDisplayName()); + + secondProject.getBuildersList().clear(); + secondProject.getBuildersList().add(new AssertPipelineVersion("1.0.0.1")); + + BuildPipelineView view = new BuildPipelineView("", "", new DownstreamProjectGridBuilder("firstProject"), "1", false, null); + view.triggerManualBuild(1, "secondProject", "firstProject"); + jenkins.waitUntilNoActivity(); + + assertNotNull(secondProject.getLastBuild()); + assertEquals("true", secondProject.getLastBuild().getBuildVariableResolver().resolve("test")); + } + + private class AssertNoPipelineVersion extends TestBuilder { public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {