在Jenkins构build步骤中从Groovy脚本访问构build环境variables(Windows)

我正在使用Scriptler插件,所以我可以运行Groovy脚本作为构build步骤。 我的jenkins奴隶在服务模式下运行在窗口。 使用脚本程序,我不需要使用Windows批处理脚本。

但是我在构build步骤中遇到了环境variables的麻烦…这是行得通的:

System.getenv("BASE") 

BASE是jenkins启动环境中的一部分。 不过,我想知道

 %JOB_NAME% 

如果我添加“执行Windows批处理命令”构build步骤:

 echo %JOB_NAME% 

有用。 如果我使用相同的设置作为构build步骤添加脚本程序脚本:

 println "JOB_NAME: " + System.getenv("JOB_NAME") 

我越来越:

 JOB_NAME: null 

那么我怎样才能从Groovy脚本到达注入的环境variables呢?

Solutions Collecting From Web of "在Jenkins构build步骤中从Groovy脚本访问构build环境variables(Windows)"

Scriptler Groovy脚本似乎没有获得构建的所有环境变量。 但是你可以做的是强制他们作为脚本的参数:

  1. 将Scriptler构建步骤添加到作业中时,选择“定义脚本参数”选项

  2. 为要传递的每个环境变量添加一个参数,例如“Name:JOB_NAME”,“Value:$ JOB_NAME”。 该值将从Jenkins构建环境中使用'$ envName'类型变量进行扩展,作业配置设置中的大多数字段都支持这种扩展。

  3. 在你的脚本中,你应该有一个与参数名称相同的变量,所以你可以像这样访问参数:

    println“JOB_NAME = $ JOB_NAME”

除了一些实验,我还没有用过Sciptler,但是你的问题提出了一个有趣的问题。 我希望这有帮助!

监听器和建立在系统常规执行期间存在的对象。 你可以这样做:

 def myVar = build.getEnvironment(listener).get('myVar') 

你也许可以像这样得到它们:

 def thr = Thread.currentThread() def build = thr?.executable def envVarsMap = build.parent.builds[0].properties.get("envVars") 

我唯一可以在Linux上运行的方法就是遵循这个建议:

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script

 import hudson.model.* // get current thread / Executor and current build def thr = Thread.currentThread() def build = thr?.executable // if you want the parameter by name ... def hardcoded_param = "FOOBAR" def resolver = build.buildVariableResolver def hardcoded_param_value = resolver.resolve(hardcoded_param) println "param ${hardcoded_param} value : ${hardcoded_param_value}" 

这是在CentOS 6.7上运行的Jenkins 1.624

在jenkins 2.x上,用groovy插件2.0,运行SystemGroovyScript,我设法建立变量,如下所示:

 def build = this.getProperty('binding').getVariable('build') def listener = this.getProperty('binding').getVariable('listener') def env = build.getEnvironment(listener) println env.MY_VARIABLE 

如果你从文件中使用goovy,简单的System.getenv('MY_VARIABLE')就足够了