我正在使用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呢?
Scriptler Groovy脚本似乎没有获得构建的所有环境变量。 但是你可以做的是强制他们作为脚本的参数:
将Scriptler构建步骤添加到作业中时,选择“定义脚本参数”选项
为要传递的每个环境变量添加一个参数,例如“Name:JOB_NAME”,“Value:$ JOB_NAME”。 该值将从Jenkins构建环境中使用'$ envName'类型变量进行扩展,作业配置设置中的大多数字段都支持这种扩展。
在你的脚本中,你应该有一个与参数名称相同的变量,所以你可以像这样访问参数:
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')
就足够了