diff --git a/pom.xml b/pom.xml
index 28b06c86..32f39da0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -183,6 +183,12 @@
ansicolor
test
+
+ org.jenkins-ci.plugins
+ pipeline-stage-step
+ 2.3
+ test
+
org.jenkins-ci.plugins.workflow
workflow-cps
diff --git a/src/main/java/jenkins/plugins/logstash/LogstashConsoleLogFilter.java b/src/main/java/jenkins/plugins/logstash/LogstashConsoleLogFilter.java
index d5995163..0f793e63 100644
--- a/src/main/java/jenkins/plugins/logstash/LogstashConsoleLogFilter.java
+++ b/src/main/java/jenkins/plugins/logstash/LogstashConsoleLogFilter.java
@@ -6,6 +6,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import hudson.EnvVars;
import hudson.Extension;
import hudson.console.ConsoleLogFilter;
import hudson.model.AbstractBuild;
@@ -16,14 +17,16 @@
public class LogstashConsoleLogFilter extends ConsoleLogFilter implements Serializable
{
+ private EnvVars envVars;
private static final Logger LOGGER = Logger.getLogger(LogstashConsoleLogFilter.class.getName());
private transient Run, ?> run;
public LogstashConsoleLogFilter() {}
- public LogstashConsoleLogFilter(Run, ?> run)
+ public LogstashConsoleLogFilter(Run, ?> run, EnvVars envVars)
{
this.run = run;
+ this.envVars = envVars;
}
private static final long serialVersionUID = 1L;
@@ -62,7 +65,7 @@ public OutputStream decorateLogger(Run build, OutputStream logger) throws IOExce
LogstashWriter getLogStashWriter(Run, ?> build, OutputStream errorStream)
{
- return new LogstashWriter(build, errorStream, null, build.getCharset());
+ return new LogstashWriter(build, errorStream, null, build.getCharset(), envVars);
}
private boolean isLogstashEnabled(Run, ?> build)
diff --git a/src/main/java/jenkins/plugins/logstash/LogstashWriter.java b/src/main/java/jenkins/plugins/logstash/LogstashWriter.java
index 2523814a..70a14226 100644
--- a/src/main/java/jenkins/plugins/logstash/LogstashWriter.java
+++ b/src/main/java/jenkins/plugins/logstash/LogstashWriter.java
@@ -25,6 +25,7 @@
package jenkins.plugins.logstash;
+import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.TaskListener;
import hudson.model.Run;
@@ -61,8 +62,14 @@ public class LogstashWriter {
private final LogstashIndexerDao dao;
private boolean connectionBroken;
private final Charset charset;
+ private final EnvVars envVars;
public LogstashWriter(Run, ?> run, OutputStream error, TaskListener listener, Charset charset) {
+ this(run, error, listener, charset, null);
+ }
+
+ public LogstashWriter(Run, ?> run, OutputStream error, TaskListener listener, Charset charset, EnvVars envVars) {
+ this.envVars = envVars;
this.errorStream = error != null ? error : System.err;
this.build = run;
this.listener = listener;
@@ -154,7 +161,7 @@ BuildData getBuildData() {
if (build instanceof AbstractBuild) {
return new BuildData((AbstractBuild, ?>) build, new Date(), listener);
} else {
- return new BuildData(build, new Date(), listener);
+ return new BuildData(build, new Date(), listener, envVars);
}
}
diff --git a/src/main/java/jenkins/plugins/logstash/persistence/BuildData.java b/src/main/java/jenkins/plugins/logstash/persistence/BuildData.java
index 4379a4de..65a48669 100644
--- a/src/main/java/jenkins/plugins/logstash/persistence/BuildData.java
+++ b/src/main/java/jenkins/plugins/logstash/persistence/BuildData.java
@@ -24,6 +24,7 @@
package jenkins.plugins.logstash.persistence;
+import hudson.EnvVars;
import hudson.model.Action;
import hudson.model.Environment;
import hudson.model.Executor;
@@ -212,20 +213,23 @@ public BuildData(AbstractBuild, ?> build, Date currentTime, TaskListener liste
}
// Pipeline project build
- public BuildData(Run, ?> build, Date currentTime, TaskListener listener) {
+ public BuildData(Run, ?> build, Date currentTime, TaskListener listener, EnvVars envVars) {
initData(build, currentTime);
rootProjectName = projectName;
rootFullProjectName = fullProjectName;
rootProjectDisplayName = displayName;
rootBuildNum = buildNum;
-
- try {
- // TODO: sensitive variables are not filtered, c.f. https://stackoverflow.com/questions/30916085
- buildVariables = build.getEnvironment(listener);
- } catch (IOException | InterruptedException e) {
- LOGGER.log(WARNING,"Unable to get environment for " + build.getDisplayName(),e);
- buildVariables = new HashMap<>();
+ if (envVars != null) {
+ buildVariables = envVars;
+ } else {
+ try {
+ // TODO: sensitive variables are not filtered, c.f. https://stackoverflow.com/questions/30916085
+ buildVariables = build.getEnvironment(listener);
+ } catch (IOException | InterruptedException e) {
+ LOGGER.log(WARNING,"Unable to get environment for " + build.getDisplayName(),e);
+ buildVariables = new HashMap<>();
+ }
}
}
diff --git a/src/main/java/jenkins/plugins/logstash/pipeline/LogstashStep.java b/src/main/java/jenkins/plugins/logstash/pipeline/LogstashStep.java
index 142f97c1..317328b1 100644
--- a/src/main/java/jenkins/plugins/logstash/pipeline/LogstashStep.java
+++ b/src/main/java/jenkins/plugins/logstash/pipeline/LogstashStep.java
@@ -15,6 +15,7 @@
import org.jenkinsci.plugins.workflow.steps.StepExecution;
import org.kohsuke.stapler.DataBoundConstructor;
+import hudson.EnvVars;
import hudson.Extension;
import hudson.console.ConsoleLogFilter;
import hudson.model.Run;
@@ -59,6 +60,7 @@ public boolean start() throws Exception {
context
.newBodyInvoker()
.withContext(createConsoleLogFilter(context))
+ .withContext(context.get(EnvVars.class))
.withCallback(BodyExecutionCallback.wrap(context))
.start();
return false;
@@ -68,7 +70,8 @@ private ConsoleLogFilter createConsoleLogFilter(StepContext context)
throws IOException, InterruptedException {
ConsoleLogFilter original = context.get(ConsoleLogFilter.class);
Run, ?> build = context.get(Run.class);
- ConsoleLogFilter subsequent = new LogstashConsoleLogFilter(build);
+ EnvVars envVars = context.get(EnvVars.class);
+ ConsoleLogFilter subsequent = new LogstashConsoleLogFilter(build, envVars);
return BodyInvoker.mergeConsoleLogFilters(original, subsequent);
}
diff --git a/src/test/java/jenkins/plugins/logstash/PipelineTest.java b/src/test/java/jenkins/plugins/logstash/PipelineTest.java
index ec67b616..27b484aa 100644
--- a/src/test/java/jenkins/plugins/logstash/PipelineTest.java
+++ b/src/test/java/jenkins/plugins/logstash/PipelineTest.java
@@ -13,6 +13,7 @@
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.BuildWatcher;
+import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.JenkinsRule;
import jenkins.plugins.logstash.configuration.MemoryIndexer;
@@ -38,20 +39,28 @@ public void setup() throws Exception
config.setEnabled(true);
}
+ @Issue("JENKINS-61735")
@Test
public void logstash() throws Exception
{
WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p");
- p.setDefinition(new CpsFlowDefinition("logstash {\n" +
- "currentBuild.result = 'SUCCESS'\n" +
- "echo 'Message'\n" +
- "}", true));
+ p.setDefinition(new CpsFlowDefinition(
+ "node('master') {\n" +
+ " stage('mystage') {\n" +
+ " logstash {\n" +
+ " currentBuild.result = 'SUCCESS'\n" +
+ " echo 'Message'\n" +
+ " }\n" +
+ " }\n" +
+ "}", true));
j.assertBuildStatusSuccess(p.scheduleBuild2(0).get());
List dataLines = memoryDao.getOutput();
assertThat(dataLines.size(), equalTo(1));
JSONObject firstLine = dataLines.get(0);
JSONObject data = firstLine.getJSONObject("data");
assertThat(data.getString("result"),equalTo("SUCCESS"));
+ assertThat(data.getJSONObject("buildVariables").getString("STAGE_NAME"), equalTo("mystage"));
+ assertThat(data.getJSONObject("buildVariables").getString("NODE_NAME"), equalTo("master"));
}
@Test