2015-04-23 87 views
1

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

如果我启动了一个作业,以便的MyPath值为“C:\Temp\”,我想Groovy脚本改变MyPath值是“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插件,但据我理解,不支持什么,我想做的事情。

谢谢。

回答

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))) 

可以创建其他参数,然后使用参数路径2中批量命令

+0

谢谢,而其他答案的工作,这正是我正在寻找的解决方案。 – Aeropher

1

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

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

+0

我在Windows 2008 R2服务器上做了一个快速测试。 setx MY_VAR“值”。 该变量在当前的dos命令窗口中不可用。 但是,如果我打开一个新的dos命令,我可以用set命令查看MY_VAR变量。 所以你不需要重启就可以用setx设置一个变量。 也许这种解决方案将工作,待测试... –

+0

你是对的。很抱歉,请以某种方式编辑您的答案,以便我可以放弃它。 – MichaelS

+0

完成,downvote没有问题。 –

0

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

+2

正如我下面所说的,SETX命令可以在不重启的情况下更改一个值。 –

+0

刚刚测试过,你是对的。修改我的答案。抱歉。 – MichaelS

+1

这绝对是一个可能的解决方案,但我想保留Jenkins作业中的所有代码,因为我发现它更易于维护。我正在积极尝试减少我在Jenkins以外的批处理文件中的代码量,因为保持它们的组织是令人讨厌的。我想我可以使用“提供配置文件”选项来交付批处理文件,但让代码在某处仍然会让我感到不安。 – Aeropher

相关问题