diff --git a/pom.xml b/pom.xml
index bee9e2ac..fa99c7bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -156,5 +156,11 @@
scm-api
2.2.6
+
+ io.jenkins.plugins
+ generic-environment-filters
+ 1.1
+ test
+
diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStepTest.java
index c0e54af5..ba855184 100644
--- a/src/test/java/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStepTest.java
+++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/durable_task/ShellStepTest.java
@@ -32,6 +32,8 @@
import hudson.slaves.EnvironmentVariablesNodeProperty;
import hudson.tasks.BatchFile;
import hudson.tasks.Shell;
+import io.jenkins.plugins.generic_environment_filters.RemoveSpecificVariablesFilter;
+import io.jenkins.plugins.generic_environment_filters.VariableContributingFilter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
@@ -54,6 +56,7 @@
import java.util.logging.Level;
import java.util.logging.LogRecord;
import javax.annotation.CheckForNull;
+import jenkins.tasks.filters.EnvVarsFilterGlobalConfiguration;
import jenkins.util.JenkinsJVM;
import org.apache.commons.lang.StringUtils;
@@ -724,6 +727,23 @@ private static final class HelloNote extends ConsoleNote> {
j.waitForMessage("Timeout has been exceeded", b); // TODO assertLogContains fails unless a sleep is introduced; possible race condition in waitForCompletion
}
+ @Issue("JENKINS-62014")
+ @Test public void envVarFilters() throws Exception {
+ EnvVarsFilterGlobalConfiguration.getAllActivatedGlobalRules().add(new RemoveSpecificVariablesFilter("FOO", "TODO: UNUSED"));
+ EnvVarsFilterGlobalConfiguration.getAllActivatedGlobalRules().add(new VariableContributingFilter("BAZ", "QUX"));
+ WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p");
+ p.setDefinition(new CpsFlowDefinition(
+ "node() {\n" +
+ " withEnv(['FOO=BAR']) {\n" +
+ " sh('echo FOO=$FOO and BAZ=$BAZ')\n" +
+ " }\n" +
+ "}", true));
+ WorkflowRun b = j.buildAndAssertSuccess(p);
+ j.assertLogContains("FOO=", b);
+ j.assertLogNotContains("FOO=BAR", b);
+ j.assertLogContains("BAZ=QUX", b);
+ }
+
/**
* Asserts that the predicate remains true up to the given timeout.
*/