在 Jenkins 构建步骤之间更改环境变量

Change an environment variable in between Jenkins build steps

我有一个 Jenkins 作业,其中有一个名为 MyPath 的字符串参数,一个 groovy 脚本构建步骤,然后是一个批处理命令构建步骤。

如果我开始一项工作使得 MyPath 的值为“C:\Temp\”,我希望 groovy 脚本将 MyPath 的值更改为是“C:\Temp.4\setup.exe” 然后我想用批处理文件执行 MyPath.

我知道我可以从 groovy 启动一个进程并且我可以批量执行我的 groovy 逻辑,如果我可以在构建步骤之间传递变量就好了。

要使用 groovy 中的参数,您必须使用库来解析它(如下)。有什么方法可以设置吗?

def path = build.buildVariableResolver.resolve("MyPath");

如果有这样的东西就完美了:

buildVariableChanger.change("MyPath") = "C:.4\setup.exe"

我也查看了 EnvInject 插件,但据我所知,它不支持我想做的事情。

谢谢。

一个选项应该是使用 SETX Windows 命令来设置用户(或系统)环境变量的值。

如果您在 Groovy 步骤中设置此变量,那么批处理步骤应该可以使用它。

为什么不直接将变量传递给批处理?您可以从第一个脚本开始批处理,而不是从自己的构建步骤开始。只需用 yourscript.bat C:.4\setup.exe 调用它。您可以使用 %1 访问参数。如果您将行 %1 插入到您的 bat 文件中,它将执行 C:.4\setup.exe.

我认为这是不可能的,因为 StringParameterValue.class 的字段值是最终的:http://javadoc.jenkins-ci.org/hudson/model/StringParameterValue.html

解决方案可能是在 groovy 脚本中创建其他参数

import hudson.model.StringParameterValue
import hudson.model.ParametersAction

def newPath = build.buildVariableResolver.resolve("MyPath") + "3.4\setup.exe"
build.addAction(new ParametersAction (new StringParameterValue ('path2', newPath)))

然后在批处理命令中使用参数path2