Groovy Init 中的 Jenkins 环境变量

Posted

技术标签:

【中文标题】Groovy Init 中的 Jenkins 环境变量【英文标题】:Jenkins Environment Variables in Groovy Init 【发布时间】:2017-12-06 03:03:57 【问题描述】:

我正在构建 Jenkins 的 Docker 映像,并将 ENV 变量传递给 jenkins.sh 初始化文件:

Dockerfile

...

COPY ./jenkins.sh /usr/local/bin/jenkins.sh 

jenkins.sh

echo ENV: "$ENV"
echo CLUSTER: "$CLUSTER"
echo REGION: "$REGION"

当我运行映像时,这些值会完美打印出来,但我想在 Jenkins 初始化期间在 Groovy 脚本中使用它们。

以下在启动时会抛出错误:

import java.util.Arrays
import java.util.logging.Logger
Logger logger = Logger.getLogger("ecs-cluster")

logger.info("Loading Archeus-Midwayer...")
import jenkins.model.*
instance = Jenkins.getInstance()

def env = System.getenv()
println(env['CLUSTER'])

错误

警告:无法运行脚本文件:/var/jenkins_home/init.groovy.d/init_ecs.groovy groovy.lang.MissingPropertyException:没有这样的属性:类的集群:init_ecs 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) 在 org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)

如何捕获jenkins.sh 中存在的环境变量?

谢谢!

【问题讨论】:

如果用env.each println it 迭代env 会怎样?有吗?如果 export 环境变量位于 jenkins.sh 中怎么办?那么这些在 Groovy 中可用吗? 所以导出不起作用(有点预期,因为我认为导出的范围是外壳),但env.each println it 显示了它。为什么 env['CLUSTER'] 不起作用? 好吧,我想我在出口作品上跳了枪。谢谢杰罗德! 也许Access to build environment variables from a groovy script in a Jenkins build step ( Windows) 也有帮助。 我不确定在运行 init.groovy.d 文件时是否存在“构建”概念,是吗?或者我不确定如何构建构建对象。我也使用sed -i "1s/^/CLUSTER=\"$CLUSTER\" \n/" /usr/share/jenkins/ref/init.groovy.d/init_ecs.groovy 让它工作,但我更喜欢导出。 :) 【参考方案1】:

检查环境变量:

def env = System.getenv()
env.each  
  println it

Exportjenkins.sh 中的环境变量。

另见 Access to build environment variables from a groovy script in a Jenkins build step ( Windows)。

【讨论】:

以上是关于Groovy Init 中的 Jenkins 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

DevOps-3:Jenkins使用的Groovy语言介绍

DevOps-3:Jenkins使用的Groovy语言介绍

DevOps-3:Jenkins使用的Groovy语言介绍

在 Jenkins 上使用 Groovy 配置 amazon-ecs 从属插件

如何在 Jenkins/Hudson 中以编程方式设置环境变量?

Jenkins-pipeline 从 groovy 中的属性文件中提取和设置变量