在Jenkins构建步骤中从groovy脚本访问构建环境变量(Windows)

时间:2014-01-20 14:15:37

标签: windows groovy jenkins environment-variables

我正在使用Scriptler插件,所以我可以运行一个groovy脚本作为构建步骤。我的Jenkins奴隶在服务模式下运行在Windows上。使用scriptler,我不需要使用Windows批处理脚本。

但是我无法在构建步骤中获取环境变量......这是有效的:

System.getenv("BASE")

其中BASE是jenkins启动时环境变体的一部分。但是,我想得到

%JOB_NAME%

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

echo %JOB_NAME%

有效。 如果我使用相同的设置添加脚本编写器脚本作为构建步骤:

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

我得到了:

JOB_NAME: null

那么如何从groovy脚本中将注入的环境变量作为构建步骤来实现?

8 个答案:

答案 0 :(得分:50)

系统常规执行期间存在

build对象。你可以这样做:

def myVar = build.getBuildVariables().get('myVar')

答案 1 :(得分:17)

你或许可以这样得到它们:

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

答案 2 :(得分:8)

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

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

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

  3. 在您的脚本中,您应该有一个与参数同名的变量,因此您可以使用以下内容访问参数:

    println“JOB_NAME = $ JOB_NAME”

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

答案 3 :(得分:7)

在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')就足够了

答案 4 :(得分: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}"

这是在CentOS 6.7上运行的Jenkins 1.624

答案 5 :(得分:1)

Jenkins 2.x具有全局变量。 \pset null 'Ø' 是任何脚本中的一个...

env

更多{@ {3}}

答案 6 :(得分:1)

需要注意的一件事是,如果您正在使用自由样式作业,则除非使用系统Groovy脚本构建步骤,否则您将无法访问构建参数或Jenkins JVM的环境。在收集足够的线索以找出答案之前,我花了几个小时进行谷歌搜索和研究。

答案 7 :(得分:0)

System Groovy Script (Jenkins 2.89) 中,我能够使用环境变量禁用另一个 Jenkins 作业

import jenkins.*
import jenkins.model.*
def env = binding.build.environment
Jenkins.instance.getItemByFullName(env.job_name).setDisabled(false) 

我还添加了一个条件步骤,以便启用或禁用另一个 Jenkins 作业。

enter image description here

谢谢@Allan Lewis,您的评论很有帮助。