在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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐