4

我正在将 Jenkins 与 Testswarm 和这个插件分叉来源)一起使用。

我想为 Testswarm 获取一个“作业名称”,其中包含 Jenkins 作业名称、内部版本号和 svn 修订号。

将 JOB_NAME 放在配置字段中没有帮助,变量不会被其值替换。

所以我修改了插件源代码以获取 Jenkins 环境变量,但我得到的只是“null”。

这是罪魁祸首代码。(在 src/main/java/com/javaclimber/jenkins/testswarmplugin/TestSwarmBuilder.java 的第 205 行)

我对此功能进行了很多研究,但没有找到获取变量的工作示例。

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 Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~10.04.2)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

4

4 回答 4

9

更换

EnvVars envVars = build.getEnvironment(listener);

经过

EnvVars envVars = new EnvVars();
envVars = build.getEnvironment(listener);

做的伎俩...

于 2013-01-09T08:25:57.277 回答
1

您使用的是什么版本的 Java?根据this,要获取环境变量,需要添加以下内容:

String job_name = System.getenv("JOB_NAME");

你试过这个吗?

另外,我不确定配置字段是什么样的,但是您是否尝试过使用$JOB_NAME而不是JOB_NAME

于 2013-01-08T17:36:35.883 回答
0

Jenkins 管道似乎在服务器上执行,因此原始帖子可能缺少为代理定义的变量(通过服务器的代理定义或通过代理的操作系统)。

我不知道 Jenkins 管道获取代理环境的方式。

于 2020-03-20T21:25:00.863 回答
0

我偶然发现了这个并搜索了一段时间的解决方案,所以对于下一个用户的答案:如果您需要环境变量,请覆盖

public void perform(Run<?, ?> run, FilePath workspace, EnvVars env, Launcher launcher, TaskListener listener)

代替

public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener)

并使用EnvVarsfrom 参数。(另见https://issues.jenkins.io/browse/JENKINS-29144

于 2021-03-17T16:30:44.533 回答