我试图通过EnvironmentContributor.buildEnvironmentFor()方法在运行时设置Jenkins环境变量。假设我在Jenkins配置页面中设置了一个名为“existingKey”的环境变量,其值为“oldValue”。如果我使用EnvVars.overrideAll将existingKey设置为任何其他值,则不需要。新的键/值对仍然存在。这是我的代码:
@Extension
public class MyEnvironmentContributor extends EnvironmentContributor {
Logger log...
@Override
public void buildEnvironmentFor(@Nonnull Job j, @Nonnull EnvVars envs, @Nonnull TaskListener listener) throws IOException, InterruptedException {
log.fine("pre: existingKey="+envs.get("existingKey"));
HashMap<String, String> newEnvVars = new HashMap<String, String>();
newEnvVars.put("newKey", "newValue");
newEnvVars.put("existingKey","newValue");
envs.overrideAll(newEnvVars);
log.fine("post: existingKey="+envs.get("existingKey"));
}
}
我使用相同的结果测试了上面的buildEnvironmentFor(Job,...)和buildEnvironmentFor(Run,...)。我也尝试过EnvVar.override()和envVar.overrideExpandingAll(),似乎没有工作。
我还扩展了RunListener,它允许我监视我的env变量是否设置好。
@Extension
public class MyRunListener extends RunListener<Run> {
Logger log.....
public MyRunListener(){
//lazy loaded class
}
@Override
public void onStarted(final Run run, final TaskListener listener) {
log.fine("Build Started: " + run.getUrl() + ", " + run.getDisplayName());
try{
EnvVars env = run.getEnvironment(listener);
for (Entry<String, String> entry : env.entrySet()) {
log.fine(entry.getKey() + "=" + entry.getValue());
}
}catch(){//trivial}
}
}
生成的日志如下所示:
Build Started: job/Test/job/EnvTest/20/, #20
pre: existingKey=oldValue
post: existingKey=newValue
newKey=newValue
existingKey=oldValue
我也在我的构建容器中打印出env,它显示了相同的模式。任何想法如何实际覆盖现有变量而不只是设置新变量?
答案 0 :(得分:0)
由于EnvVars扩展TreeMap
,因此在插入existingKey
之前,您可以将其删除,即
log.fine("pre: existingKey="+envs.get("existingKey"));
envs.remove("existingKey");
newEnvVars.put("newKey", "newValue");
newEnvVars.put("existingKey","newValue");
envs.overrideAll(newEnvVars);
log.fine("post: existingKey="+envs.get("existingKey"));
答案 1 :(得分:0)
看起来这是不可能的。
并且{是
env
在首次使用后缓存变量,以避免性能 问题。目前没有任何重新运行的规定EnvironmentContributor
,以及Jenkins中的任何API 贡献者表示他们的结果可能已经发生变化 最后一个电话。 https://groups.google.com/forum/#!msg/jenkinsci-dev/FM_Nx_K_v9g/4BzWXd3cAgAJ