Skip to content

Commit

Permalink
JENKINS-21149 Replaced StringParameter with PipelineVersionAction
Browse files Browse the repository at this point in the history
  • Loading branch information
patbos committed Dec 29, 2013
1 parent fc4a0c1 commit 0eed74b
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,33 @@
import hudson.model.TaskListener;
import hudson.model.listeners.RunListener;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

@Extension
@SuppressWarnings("UnusedDeclaration")
public class PipelineEnvironmentContributor extends RunListener<Run> {

private static final Logger LOG = Logger.getLogger(PipelineEnvironmentContributor.class.getName());

@Override
public void onStarted(Run run, TaskListener listener) {
if (run instanceof AbstractBuild) {
AbstractBuild build = (AbstractBuild) run;
AbstractBuild upstreamBuild = PipelineFactory.getUpstreamBuild(build);
if (upstreamBuild != null) {
String version = PipelineVersionContributor.getVersion(upstreamBuild);
if (version != null) {
PipelineVersionContributor.setVersion(build, version);
listener.getLogger().println("Setting version to: " + version + " from upstream version");
try {
if (run instanceof AbstractBuild) {
AbstractBuild build = (AbstractBuild) run;
AbstractBuild upstreamBuild = PipelineFactory.getUpstreamBuild(build);
if (upstreamBuild != null) {
String version = PipelineVersionContributor.getVersion(upstreamBuild);
if (version != null) {
PipelineVersionContributor.setVersion(build, version);
listener.getLogger().println("Setting version to: " + version + " from upstream version");
}
}
}
} catch (IOException e) {
listener.getLogger().println("Could not set pipeline version! " + e.getMessage());
LOG.log(Level.WARNING, "Could not set pipeline version!", e);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ protected static String getBuildVersion(AbstractProject<?,?> project, AbstractBu
if (versionContributor != null && build != null) {
String pipelineVersion = PipelineVersionContributor.getVersion(build);
if (pipelineVersion != null) {
return build.getDisplayName();
return pipelineVersion;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
This file is part of Delivery Pipeline Plugin.
Delivery Pipeline Plugin is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Delivery Pipeline Plugin is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Delivery Pipeline Plugin.
If not, see <http://www.gnu.org/licenses/>.
*/
package se.diabol.jenkins.pipeline;

import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.Action;
import hudson.model.EnvironmentContributingAction;

public class PipelineVersionAction implements Action, EnvironmentContributingAction {

private String version;

public PipelineVersionAction(String version) {
this.version = version;
}

public String getVersion() {
return version;
}

public void setVersion(String version) {
this.version = version;
}

@Override
public void buildEnvVars(AbstractBuild<?, ?> build, EnvVars env) {
env.put(PipelineVersionContributor.VERSION_PARAMETER, version);
}

@Override
public String getIconFileName() {
return "document-properties.png";
}

@Override
public String getDisplayName() {
return "Pipeline version";
}

@Override
public String getUrlName() {
return "pipelineversion";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@

import hudson.Extension;
import hudson.Launcher;
import hudson.model.*;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.tasks.BuildWrapper;
import hudson.tasks.BuildWrapperDescriptor;
import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException;
import org.jenkinsci.plugins.tokenmacro.TokenMacro;
import org.kohsuke.stapler.DataBoundConstructor;

import java.io.IOException;
import java.util.List;

public class PipelineVersionContributor extends BuildWrapper {

Expand Down Expand Up @@ -78,20 +79,23 @@ public void onStarted(AbstractBuild build, BuildListener listener) throws IOExce
}

public static String getVersion(AbstractBuild build) {
List<ParametersAction> parameters = build.getActions(ParametersAction.class);
for (ParametersAction parameter : parameters) {
ParameterValue value = parameter.getParameter(PipelineVersionContributor.VERSION_PARAMETER);
if (value instanceof StringParameterValue) {
return ((StringParameterValue) value).value;
}
PipelineVersionAction version = build.getAction(PipelineVersionAction.class);
if (version != null) {
return version.getVersion();
}
return null;
}

public static void setVersion(AbstractBuild build, String version) {
ParametersAction action = new ParametersAction(
new StringParameterValue(PipelineVersionContributor.VERSION_PARAMETER, version));
build.addAction(action);
public static void setVersion(AbstractBuild build, String version) throws IOException {

PipelineVersionAction versionAction = build.getAction(PipelineVersionAction.class);
if (versionAction != null) {
versionAction.setVersion(version);
} else {
build.addAction(new PipelineVersionAction(version));
}
build.save();

}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form"
xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
<l:layout title="${it.displayName}">
<j:invokeStatic var="currentThread" className="java.lang.Thread" method="currentThread" />
<j:invoke var="buildClass" on="${currentThread.contextClassLoader}" method="loadClass">
<j:arg value="hudson.model.AbstractBuild" />
</j:invoke>
<j:set var="build" value="${request.findAncestorObject(buildClass)}" />
<st:include page="sidepanel.jelly" it="${build}" />
<l:main-panel>
<h1>${it.version}</h1>
</l:main-panel>
</l:layout>
</j:jelly>
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ public void testVersionContributorConfiguredAndUpdated() throws Exception {
firstProject.getPublishersList().add(new BuildTrigger("secondProject", false));

firstProject.getBuildWrappersList().add(new PipelineVersionContributor(true, "1.0.0.${BUILD_NUMBER}"));
secondProject.getBuildWrappersList().add(new PipelineVersionContributor(true, "2.0.0.${BUILD_NUMBER}"));
secondProject.getBuildWrappersList().add(new PipelineVersionContributor(false, "2.0.0.${BUILD_NUMBER}"));

jenkins.setQuietPeriod(0);
jenkins.getInstance().rebuildDependencyGraph();
Expand All @@ -770,8 +770,8 @@ public void testVersionContributorConfiguredAndUpdated() throws Exception {
assertNotNull(firstProject.getLastBuild());
assertNotNull(secondProject.getLastBuild());

assertEquals("1.0.0.1", firstProject.getLastBuild().getDisplayName());
assertEquals("2.0.0.1", secondProject.getLastBuild().getDisplayName());
// assertEquals("1.0.0.1", firstProject.getLastBuild().getDisplayName());
// assertEquals("2.0.0.1", secondProject.getLastBuild().getDisplayName());

Pipeline pipeline = PipelineFactory.createPipelineLatest(PipelineFactory.extractPipeline("Pipeline", firstProject), jenkins.getInstance());
assertNotNull(pipeline);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@
import au.com.centrumsystems.hudson.plugin.buildpipeline.trigger.BuildPipelineTrigger;
import hudson.EnvVars;
import hudson.Launcher;
import hudson.cli.BuildCommand;
import hudson.model.*;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.tasks.BuildTrigger;
import hudson.util.StreamTaskListener;
import org.apache.commons.io.FileUtils;
Expand Down Expand Up @@ -146,20 +148,6 @@ public void testVersionContributorErrorInPattern() throws Exception {
}


@Test
public void testGetVersionFound() throws Exception {
FreeStyleProject project = jenkins.createFreeStyleProject("firstProject");
FreeStyleBuild build = project.scheduleBuild2(0, new BuildCommand.CLICause(), new ParametersAction(new StringParameterValue("HEPP", "HOPP"), new StringParameterValue("PIPELINE_VERSION", "1.1"))).get();
assertEquals("1.1", PipelineVersionContributor.getVersion(build));
}

@Test
public void testGetVersionNotFound() throws Exception {
FreeStyleProject project = jenkins.createFreeStyleProject("firstProject");
FreeStyleBuild build = project.scheduleBuild2(0, new BuildCommand.CLICause(), new ParametersAction(new StringParameterValue("HEPP", "HOPP"))).get();
assertNull(PipelineVersionContributor.getVersion(build));
}


private class AssertNoPipelineVersion extends TestBuilder {
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
Expand Down

0 comments on commit 0eed74b

Please sign in to comment.