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

时间:2015-04-23 10:15:59

标签: batch-file groovy jenkins hudson

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

如果我开始工作以使MyPath的值为" C:\Temp\",我希望groovy脚本将MyPath的值更改为be" C:\Temp\3.4\setup.exe"然后我想使用批处理文件来执行MyPath

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

要在groovy中使用参数,您必须使用该库来解析它(如下所示)。有没有可以设置它的方法?

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

如果它存在,这样的东西将是完美的:

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

我不认为这是可能的,因为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

答案 1 :(得分:1)

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

如果在Groovy步骤中设置此变量,则批处理步骤应该能够使用它。

答案 2 :(得分:0)

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