From c6ce1fe1d0f1d00eb55e9c349f591a2c4ef764f6 Mon Sep 17 00:00:00 2001 From: Gregory Boissinot Date: Mon, 6 May 2013 23:22:28 +0200 Subject: [PATCH] Fix JENKINS-17566 --- .../envinject/service/EnvVarsResolver.java | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jenkinsci/lib/envinject/service/EnvVarsResolver.java b/src/main/java/org/jenkinsci/lib/envinject/service/EnvVarsResolver.java index e9e64e8..fe872a1 100644 --- a/src/main/java/org/jenkinsci/lib/envinject/service/EnvVarsResolver.java +++ b/src/main/java/org/jenkinsci/lib/envinject/service/EnvVarsResolver.java @@ -15,7 +15,6 @@ import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Collections; import java.util.Map; /** @@ -38,7 +37,10 @@ public Map getPollingEnvVars(AbstractProject project, /*can be n } if (node == null) { - return Collections.emptyMap(); + return getFallBackMasterNode(project); + } + if (node.getRootPath() == null) { + return getFallBackMasterNode(project); } return getDefaultEnvVarsJob(project, node); @@ -65,7 +67,34 @@ public Map getEnVars(AbstractBuild build) throws EnvInjectExcept } } - return getDefaultEnvVarsJob(build.getProject(), build.getBuiltOn()); + Node builtOn = build.getBuiltOn(); + //-- Check if node is always on. Otherwise, gather master env vars + if (builtOn == null) { + return getFallBackMasterNode(build.getProject()); + } + if (builtOn.getRootPath() == null) { + return getFallBackMasterNode(build.getProject()); + } + //-- End check + + //Get envVars from the node of the last build + return getDefaultEnvVarsJob(build.getProject(), builtOn); + } + + private Map getFallBackMasterNode(AbstractProject project) throws EnvInjectException { + Node masterNode = getMasterNode(); + if (masterNode == null) { + return gatherEnvVarsMaster(project); + } + return getDefaultEnvVarsJob(project, masterNode); + } + + private Node getMasterNode() { + Computer computer = Hudson.getInstance().toComputer(); + if (computer == null) { + return null; //Master can have no executors + } + return computer.getNode(); } public String resolveEnvVars(AbstractBuild build, String value) throws EnvInjectException { @@ -81,14 +110,15 @@ public String resolveEnvVars(AbstractBuild build, String value) throws EnvInject return Util.replaceMacro(value, getEnVars(build)); } + private Map getDefaultEnvVarsJob(AbstractProject project, Node node) throws EnvInjectException { assert project != null; assert node != null; assert node.getRootPath() != null; + //--- Same code for master or a slave node Map result = gatherEnvVarsMaster(project); result.putAll(gatherEnvVarsNode(project, node)); result.putAll(gatherEnvVarsNodeProperties(node)); - return result; }