【发布时间】: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'] 不起作用? -
好吧,我想我在出口作品上跳了枪。谢谢杰罗德!
-
我不确定在运行 init.groovy.d 文件时是否存在“构建”概念,是吗?或者我不确定如何构建构建对象。我也使用
sed -i "1s/^/CLUSTER=\"${CLUSTER}\" \n/" /usr/share/jenkins/ref/init.groovy.d/init_ecs.groovy让它工作,但我更喜欢导出。 :)
标签: shell jenkins groovy amazon-ecs