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

本文介绍了在Windows上的Jenkins构建过程中,如何在使用Scriptler插件运行Groovy脚本时获取构建环境变量,特别是如何访问如JOB_NAME这样的变量。通过不同的方法,如使用build.getBuildVariables(),Thread.currentThread().executable,或者直接在脚本中声明参数并传入环境变量值,可以解决Groovy脚本中获取环境变量的问题。
摘要由CSDN通过智能技术生成

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

我正在使用Scriptler插件,因此可以在构建步骤中运行groovy脚本。 我的Jenkins奴隶正在服务模式下的Windows上运行。 使用脚本编辑器,我不需要使用Windows批处理脚本。

但是我很难在构建步骤中获取环境变量。

System.getenv("BASE")

其中BASE是jenkins启动时env-vars的一部分。 但是,我想得到

%JOB_NAME%

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

echo %JOB_NAME%

有用。如果要添加具有相同设置的脚本程序脚本作为构建步骤:

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

我越来越:

JOB_NAME: null

那么,如何在构建步骤中从groovy脚本中获取注入的环境变量?

7个解决方案

52 votes

在系统常规执行期间存在build对象。 你可以这样做:

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

Kanstantsin Shautsou answered 2020-06-22T09:31:30Z

18 votes

您可能可以像这样获得它们:

def thr = Thread.currentThread()

def build = thr?.executable

def envVarsMap = build.parent.builds[0].properties.get("envVars")

Alf answered 2020-06-22T09:31:50Z

9 votes

Scriptler Groovy脚本似乎无法获取构建的所有环境变量。 但是您可以执行的是强制将它们作为脚本的参数输入:

当您将Scriptler构建步骤添加到您的工作中时,选择选项“定义脚本参数”

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

在脚本中,您应该有一个与参数同名的变量,因此您可以通过以下方式访问参数:

println“ JOB_NAME = $ JOB_NAME”

除了进行一些实验外,我还没有自己使用Sciptler,但是您的问题提出了一个有趣的问题。 我希望这有帮助!

macg33zr answered 2020-06-22T09:31:09Z

8 votes

在带有groovy插件2.0的jenkins 2.x上,运行SystemGroovyScript可以构建变量,如下所示:

def build = this.getProperty('binding').getVariable('build')

def listener = this.getProperty('binding').getVariable('listener')

def env = build.getEnvironment(listener)

println env.MY_VARIABLE

如果您使用文件中的groovy,则简单的System.getenv('MY_VARIABLE')就足够了

Augustin Ghauratto answered 2020-06-22T09:32:14Z

5 votes

我可以使它工作(在Linux上)的唯一方法是遵循以下建议:

[HTTPS://wiki.Jenkins-此.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上

dayer4b answered 2020-06-22T09:32:43Z

2 votes

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

John Czukkermann answered 2020-06-22T09:33:03Z

1 votes

Jenkins 2.x具有全局变量。 env是任何脚本中的其中一个...

println env.JOB_NAME

有关更多信息,请访问[https://build.intuit.com/services-config/pipeline-syntax/globals#env]

Marcello de Sales answered 2020-06-22T09:33:28Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值