【问题标题】:Jenkins Environment Variables in Groovy InitGroovy Init 中的 Jenkins 环境变量
【发布时间】: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


【解决方案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)。

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2017-03-06
    • 2017-08-09
    相关资源
    最近更新 更多