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 环境变量的主要内容,如果未能解决你的问题,请参考以下文章
在 Jenkins 上使用 Groovy 配置 amazon-ecs 从属插件