我正在使用Jenkins和Testswarm以及plugin(forked sources)。
我希望获得包含Jenkins作业名称,内部版本号和svn修订号的Testswarm的“作业名称”。
将JOB_NAME置于配置字段中无济于事,该变量不会被其值替换。
所以我修改了插件源代码以获取Jenkins环境变量,但我得到的只是“null”。
这是罪魁祸首代码。 (在第205行的src / main / java / com / javaclimber / jenkins / testswarmplugin / TestSwarmBuilder.java中)
我研究了很多关于这个功能的事情,但我没有找到获取变量的实例。
public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
...
EnvVars envVars = build.getEnvironment(listener);
...
envVars.get("JOB_NAME")
}
我在Java方面并不放心,而且我在这一点上陷入困境。 有什么想法吗?
更新:java使用的版本
java版“1.6.0_24”
OpenJDK运行时环境(IcedTea6 1.11.5)(6b24-1.11.5-0ubuntu1~10.04.2)
OpenJDK 64位服务器VM(内置20.0-b12,混合模式)
答案 0 :(得分:9)
更换
EnvVars envVars = build.getEnvironment(listener);
通过
EnvVars envVars = new EnvVars();
envVars = build.getEnvironment(listener);
做了诀窍......
答案 1 :(得分:1)
您使用的是哪个版本的Java? 根据{{3}},要获取环境变量,您需要添加以下内容:
String job_name = System.getenv("JOB_NAME");
你试过这个吗?
另外,我不确定配置字段是什么样的,但您是否尝试使用$JOB_NAME
代替JOB_NAME
?
答案 2 :(得分:0)
Jenkins管道似乎在服务器上执行,因此原始帖子可能缺少为代理定义的变量(通过服务器的代理定义或通过代理的OS)。
我不知道获取代理环境的詹金斯管道方法。
答案 3 :(得分:0)
我偶然发现了这个并搜索了一段时间以寻找解决方案,因此对于下一个用户的答案是:如果您需要环境变量,请覆盖
df
# id org num
#1 1 <NA> NA
#2 2 Org-A 1
#3 3 Org-A;Org-B 2
#4 4 Org-C 1
#5 5 Org-A;Org-B;Org-C 3
代替
public void perform(Run<?, ?> run, FilePath workspace, EnvVars env, Launcher launcher, TaskListener listener)
并使用参数中的 public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener)
。 (另见https://issues.jenkins.io/browse/JENKINS-29144)