提交 bdfbf251 编写于 作者: K Kohsuke Kawaguchi

[FIXED JENKINS-20857] Merged pull request 1060

......@@ -55,6 +55,9 @@ Upcoming changes</a>
<!-- Record your changes in the trunk here. -->
<div id="trunk" style="display:none"><!--=TRUNK-BEGIN=-->
<ul class=image>
<li class=bug>
Fixed NPE if <tt>RunParameterValue</tt> points to a stable build.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-20857">issue 20857</a>)
<li class=bug>
Fixed a JavaScript problem in sortable table with IE8.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-21729">issue 21729</a>)
......
......@@ -23,13 +23,14 @@
*/
package hudson.model;
import java.util.Locale;
import hudson.EnvVars;
import jenkins.model.Jenkins;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.export.Exported;
import javax.annotation.CheckForNull;
import java.util.Locale;
public class RunParameterValue extends ParameterValue {
private final String runId;
......@@ -45,7 +46,10 @@ public class RunParameterValue extends ParameterValue {
this.runId = runId;
}
public Run getRun() {
/**
* Can be null if the {@link Run} that this was pointing to no longer exists.
*/
public @CheckForNull Run getRun() {
return Run.fromExternalizableId(runId);
}
......@@ -71,7 +75,7 @@ public class RunParameterValue extends ParameterValue {
public void buildEnvironment(Run<?,?> build, EnvVars env) {
Run run = getRun();
String value = Jenkins.getInstance().getRootUrl() + run.getUrl();
String value = (null == run) ? "UNKNOWN" : Jenkins.getInstance().getRootUrl() + run.getUrl();
env.put(name, value);
env.put(name + ".jobName", getJobName()); // undocumented, left for backward compatibility
......@@ -80,9 +84,10 @@ public class RunParameterValue extends ParameterValue {
env.put(name + ".number" , getNumber ()); // same as above
env.put(name + "_NUMBER" , getNumber ());
env.put(name + "_NAME", run.getDisplayName()); // since 1.504
// if run is null, default to the standard '#1' display name format
env.put(name + "_NAME", (null == run) ? "#" + getNumber() : run.getDisplayName()); // since 1.504
String buildResult = (null == run.getResult()) ? "UNKNOWN" : run.getResult().toString();
String buildResult = (null == run || null == run.getResult()) ? "UNKNOWN" : run.getResult().toString();
env.put(name + "_RESULT", buildResult); // since 1.517
env.put(name.toUpperCase(Locale.ENGLISH),value); // backward compatibility pre 1.345
......@@ -95,7 +100,8 @@ public class RunParameterValue extends ParameterValue {
}
@Override public String getShortDescription() {
return name + "=" + getRun().getFullDisplayName();
Run run = getRun();
return name + "=" + ((null == run) ? getJobName() + " #" + getNumber() : run.getFullDisplayName());
}
}
......@@ -236,6 +236,30 @@ public class RunParameterDefinitionTest {
}
@Test
public void testLoadEnvironmentVariablesWhenRunParameterJobHasBeenDeleted() throws Exception {
FreeStyleProject project = j.createFreeStyleProject("project");
FreeStyleBuild successfulBuild = project.scheduleBuild2(0).get();
FreeStyleProject paramProject = j.createFreeStyleProject("paramProject");
ParametersDefinitionProperty pdp =
new ParametersDefinitionProperty(new RunParameterDefinition("RUN",
project.getName(),
"run description",
RunParameterFilter.ALL));
paramProject.addProperty(pdp);
FreeStyleBuild build = paramProject.scheduleBuild2(0).get();
assertEquals(Integer.toString(project.getLastBuild().getNumber()),
build.getEnvironment(new LogTaskListener(LOGGER, Level.INFO)).get("RUN_NUMBER"));
successfulBuild.delete();
// We should still be able to retrieve non RunParameter environment variables for the parameterized build
// even when the selected RunParameter build has been deleted.
assertEquals("paramProject", build.getEnvironment(new LogTaskListener(LOGGER, Level.INFO)).get("JOB_NAME"));
}
static class ResultPublisher extends Publisher {
private final Result result;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册