在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