2014-01-20 547 views
30

我使用Scriptler插件,因此我可以将Groovy脚本作为构建步骤运行。我的詹金斯奴隶在服务模式下在窗户上运行。使用scriptler,我不需要使用windows批处理脚本。在Jenkins构建步骤中访问从Groovy脚本构建环境变量(Windows)

但我有麻烦获取环境变量在构建步骤...这是工作:

System.getenv("BASE") 

BASE是詹金斯启动将env-瓦尔的一部分。不过,我想获得

%JOB_NAME% 

如果我加入一个“执行Windows批处理命令”盖步:

echo %JOB_NAME% 

它的工作原理。 如果我加入一个scriptler脚本作为生成步骤使用相同的设置:

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

我越来越:

JOB_NAME: null 

所以,我怎么可以从Groovy脚本达到注入的环境变量作为构建步骤?

回答

7

Scriptler Groovy脚本似乎没有获取构建的所有环境变量。但是你可以做的是迫使他们在作为参数传递给脚本:

  1. 当您添加Scriptler建设步入你的工作,选择选项“定义脚本参数”

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

  3. 在你的脚本,你应该有相同的名称作为参数变量,这样你就可以像访问参数:

    的println“JOB_NAME = $ JOB_NAME”

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

+0

这种方法的一个问题(假设变量设置为MYVAR)是groovy将“炸毁”,如果值不作为参数提供。要看看WAS通过了什么,你可以试试这个: ''' println“ - >提供了以下值:” this.binding.variables.each {k,v - > println“$ k ='$ v' “} ''' –

16

你也许能够让他们像这样:

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

看起来很讨厌,但作品... – Rajish

+0

这没有工作詹金斯1.573 – bicepjai

40

听众和构建系统常规运行过程中存在的对象。你可以这样做:

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

谢谢!这似乎是在“Execute System Groovy Script”构建步骤中访问env vars的唯一方法。 –

+0

不适用于我,得到“作为构建包装注入env变量发生问题:null”。没有额外的错误细节,如何调试这种情况? –

+0

该问题陈述“我使用Scriptler插件...”,这需要系统常规执行,因此不回答问题。 – christutty

5

我能得到这个工作(在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}" 

这是詹金斯1。在CentOS 6.7

3

运行624詹金斯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')就足够了

相关问题