diff --git a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberAction.java b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberAction.java index ac626c3..c911d85 100644 --- a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberAction.java +++ b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberAction.java @@ -8,9 +8,12 @@ public class VersionNumberAction implements Action { private VersionNumberBuildInfo info; private String versionNumber; - public VersionNumberAction(VersionNumberBuildInfo info, String versionNumber) { + private String envPrefix; + + public VersionNumberAction(VersionNumberBuildInfo info, String versionNumber, String envPrefix) { this.info = info; this.versionNumber = versionNumber; + this.envPrefix = envPrefix; } public VersionNumberBuildInfo getInfo() { @@ -32,6 +35,13 @@ public String getIconFileName() { public String getUrlName() { return "versionnumber/displayName"; } - - + + public String getEnvPrefix() { + return envPrefix; + } + + public void setEnvPrefix(String envPrefix) { + this.envPrefix = envPrefix; + } + } diff --git a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberBuilder.java b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberBuilder.java index 2af5ac9..2bb54f5 100644 --- a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberBuilder.java +++ b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberBuilder.java @@ -204,7 +204,12 @@ public String getEnvironmentVariableName() { public String getEnvironmentPrefixVariable() { return this.environmentPrefixVariable; } - private Run getPreviousBuildWithVersionNumber(Run build, BuildListener listener) { + + private Run getPreviousBuildWithVersionNumber(Run build, String envPrefix) { + return VersionNumberCommon.getPreviousBuildWithVersionNumber(build, envPrefix); + } + + private String getEnvPrefix(Run build, BuildListener listener){ String envPrefix; if (this.environmentPrefixVariable != null) { @@ -220,15 +225,16 @@ private Run getPreviousBuildWithVersionNumber(Run build, BuildListener listener) } else { envPrefix = null; } - - return VersionNumberCommon.getPreviousBuildWithVersionNumber(build, envPrefix); + + return envPrefix; } @SuppressWarnings("unchecked") - private VersionNumberBuildInfo incBuild(Run build, BuildListener listener) throws IOException, InterruptedException { + private VersionNumberBuildInfo incBuild(Run build, BuildListener listener, String envPrefix) throws IOException, InterruptedException { EnvVars enVars = build.getEnvironment(listener); - Run prevBuild = getPreviousBuildWithVersionNumber(build, listener); - VersionNumberBuildInfo incBuildInfo = VersionNumberCommon.incBuild(build, enVars, prevBuild, + Run prevBuild = getPreviousBuildWithVersionNumber(build, envPrefix); + + VersionNumberBuildInfo incBuildInfo = VersionNumberCommon.incBuild(build, enVars, prevBuild, envPrefix, this.getWorstResultForIncrement(), this.oBuildsToday, this.oBuildsThisWeek, @@ -312,13 +318,16 @@ private VersionNumberBuildInfo incBuild(Run build, BuildListener listener) throw public Environment setUp(AbstractBuild build, Launcher launcher, BuildListener listener) { String formattedVersionNumber = ""; try { - VersionNumberBuildInfo info = incBuild(build, listener); + + String envPrefix = getEnvPrefix(build,listener); + + VersionNumberBuildInfo info = incBuild(build, listener,envPrefix); formattedVersionNumber = VersionNumberCommon.formatVersionNumber(this.versionNumberString, this.projectStartDate, info, build.getEnvironment(listener), build.getTimestamp()); - build.addAction(new VersionNumberAction(info, formattedVersionNumber)); + build.addAction(new VersionNumberAction(info, formattedVersionNumber, envPrefix)); if (useAsBuildDisplayName) { build.setDisplayName(formattedVersionNumber); } diff --git a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberCommon.java b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberCommon.java index bf7d548..0e2ed82 100644 --- a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberCommon.java +++ b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberCommon.java @@ -8,7 +8,10 @@ import java.util.logging.Logger; import java.lang.invoke.MethodHandles; +import javax.swing.text.html.HTMLDocument.HTMLReader.PreAction; + import hudson.EnvVars; +import hudson.model.Action; import hudson.model.Result; import hudson.model.Run; @@ -32,14 +35,14 @@ public class VersionNumberCommon { public static final String ENV_VAR_PATTERN = "^(?:\\$\\{(\\w+)\\})|(?:\\$(\\w+))$"; public static VersionNumberBuildInfo incBuild(Run build, EnvVars vars, - Run prevBuild, Result worstResultForIncrement, String overrideBuildsToday, String overrideBuildsThisWeek, - String overrideBuildsThisMonth, String overrideBuildsThisYear, String overrideBuildsAllTime) { - - int buildsToday = new BuildsTodayGenerator().getNextNumber(build, vars, prevBuild, worstResultForIncrement, overrideBuildsToday); - int buildsThisWeek = new BuildsThisWeekGenerator().getNextNumber(build, vars, prevBuild, worstResultForIncrement, overrideBuildsThisWeek); - int buildsThisMonth = new BuildsThisMonthGenerator().getNextNumber(build, vars, prevBuild, worstResultForIncrement, overrideBuildsThisMonth); - int buildsThisYear = new BuildsThisYearGenerator().getNextNumber(build, vars, prevBuild, worstResultForIncrement, overrideBuildsThisYear); - int buildsAllTime = new BuildsAllTimeGenerator().getNextNumber(build, vars, prevBuild, worstResultForIncrement, overrideBuildsAllTime); + Run prevBuild, String envPrefix, Result worstResultForIncrement, String overrideBuildsToday, String overrideBuildsThisWeek, + String overrideBuildsThisMonth, String overrideBuildsThisYear, String overrideBuildsAllTime) { + + int buildsToday = new BuildsTodayGenerator().getNextNumber(build, vars, prevBuild, envPrefix,worstResultForIncrement, overrideBuildsToday); + int buildsThisWeek = new BuildsThisWeekGenerator().getNextNumber(build, vars, prevBuild, envPrefix,worstResultForIncrement, overrideBuildsThisWeek); + int buildsThisMonth = new BuildsThisMonthGenerator().getNextNumber(build, vars, prevBuild, envPrefix,worstResultForIncrement, overrideBuildsThisMonth); + int buildsThisYear = new BuildsThisYearGenerator().getNextNumber(build, vars, prevBuild, envPrefix,worstResultForIncrement, overrideBuildsThisYear); + int buildsAllTime = new BuildsAllTimeGenerator().getNextNumber(build, vars, prevBuild, envPrefix,worstResultForIncrement, overrideBuildsAllTime); return new VersionNumberBuildInfo(buildsToday, buildsThisWeek, buildsThisMonth, buildsThisYear, buildsAllTime); } @@ -49,9 +52,27 @@ public static Run getPreviousBuildWithVersionNumber(Run build, String envPrefix) Run prevBuild = build.getPreviousBuild(); while (prevBuild != null) { - VersionNumberAction prevAction = (VersionNumberAction)prevBuild.getAction(VersionNumberAction.class); - - if (prevAction == null) + // VersionNumberAction prevAction = (VersionNumberAction)prevBuild.getAction(VersionNumberAction.class); + // prevAction = (VersionNumberAction)prevBuild.getAction(VersionNumberAction.class); + // 改为获取所有的VersionNumberAction + for (Action a : prevBuild.getAllActions()) { + if (!VersionNumberAction.class.isInstance(a) || a == null) { + continue; + } + VersionNumberAction prevAction = VersionNumberAction.class.cast(a); + + if (envPrefix != null) { + if (envPrefix.equals(prevAction.getEnvPrefix())) { + LOGGER.info("Previous build's version-number: '" + prevAction.getVersionNumber() + "'"); + return prevBuild; + } + } else if(envPrefix == null && prevAction.getEnvPrefix() == null){ + LOGGER.info("Previous build's version-number: '" + prevAction.getVersionNumber() + "'"); + return prevBuild; + } + } + + /*if (prevAction == null) LOGGER.fine("prevAction.getVersionNumber() : 'null'"); else LOGGER.fine("prevAction.getVersionNumber() : '" + prevAction.getVersionNumber() + "'"); @@ -68,7 +89,7 @@ public static Run getPreviousBuildWithVersionNumber(Run build, String envPrefix) LOGGER.info("Previous build's version-number: '" + prevAction.getVersionNumber() + "'"); return prevBuild; } - } + }*/ prevBuild = prevBuild.getPreviousBuild(); } diff --git a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberStep.java b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberStep.java index 26e80b2..be4d725 100644 --- a/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberStep.java +++ b/src/main/java/org/jvnet/hudson/tools/versionnumber/VersionNumberStep.java @@ -30,7 +30,6 @@ import org.jenkinsci.plugins.workflow.steps.AbstractStepDescriptorImpl; import org.jenkinsci.plugins.workflow.steps.AbstractSynchronousStepExecution; import org.jenkinsci.plugins.workflow.steps.StepContextParameter; - import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; @@ -176,8 +175,10 @@ public static class Execution extends AbstractSynchronousStepExecution { protected String run() throws Exception { if (step.versionNumberString != null) { try { + VersionNumberAction prevAction=null; + Run prevBuild = VersionNumberCommon.getPreviousBuildWithVersionNumber(run, step.versionPrefix); - VersionNumberBuildInfo info = VersionNumberCommon.incBuild(run, env, prevBuild, + VersionNumberBuildInfo info = VersionNumberCommon.incBuild(run, env, prevBuild, step.versionPrefix, step.getWorstResultForIncrement(), step.overrideBuildsToday, step.overrideBuildsThisWeek, @@ -200,7 +201,7 @@ protected String run() throws Exception { if (step.versionPrefix != null) { formattedVersionNumber = step.versionPrefix + formattedVersionNumber; } - run.addAction(new VersionNumberAction(info, formattedVersionNumber)); + run.addAction(new VersionNumberAction(info, formattedVersionNumber,step.versionPrefix)); return formattedVersionNumber; } catch (Exception e) { }