如何在Jenkinsfile中调用全局环境变量?
例如,如果我有一个变量 -
name:credentialsId
value:xxxx-xxxx-xxxxx-xxxxxxxxx
如何在groovy脚本中使用它?
我尝试了${credentialsId}
,但它没有用。它只会给出错误:
java.lang.NoSuchMethodError: No such DSL method '$' found among steps [ArtifactoryGradleBuild, ........
答案 0 :(得分:37)
在Jenkins文件中,您提到了“Working with the Environment”:
可从Jenkins管道中访问的环境变量的完整列表记录在localhost:8080 / pipeline-syntax / globals#env,
语法为${env.xxx}
,如下所示:
node {
echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
}
另请参阅“Managing the Environment”。
如何将全局变量传递给Jenkins文件?
当我说全局变量 - 我的意思是
Jenkins -> Manage Jenkins -> Configure System -> Global properties -> Environment variables
请参阅“Setting environment variables”
可以使用
withEnv
步骤在Jenkins管道中设置环境变量,该步骤允许覆盖给定的管道脚本块的指定环境变量,例如:Jenkinsfile(管道脚本)
node {
/* .. snip .. */
withEnv(["NAME=value"]) {
... your job
}
}
答案 1 :(得分:2)
在Groovy范围中引用env时,只需使用env.VARIABLE_NAME,例如将上游作业的BUILD_NUMBER传递给触发的作业:
stage ('Starting job') {
build job: 'TriggerTest', parameters: [
[$class: 'StringParameterValue', name: 'upstream_build_number', value: env.BUILD_NUMBER]
]
}
答案 2 :(得分:1)
脚本管道
要读取名称已知的环境变量,请使用env.NAME
要读取名称直到运行时才知道的环境变量,请使用env.getProperty(name)
。
例如,YAML配置文件中的值表示环境变量名称:
config.yaml (在工作区中)
myconfig:
key: JOB_DISPLAY_URL
Jenkinsfile
node {
println("Running job ${env.JOB_NAME}")
def config = readYaml(file:'config.yaml')
def value = env.getProperty(config.myconfig.key)
println("Value of property ${config.myconfig.key} is ${value}"
}
答案 3 :(得分:1)
要获取值,所有env.VAR,env ['VAR'],env.getProperty('VAR')都可以。
对于设置值,目前唯一安全的方法是 withEnv 。如果您尝试为env.VAR分配值,则在某些情况下可能无法使用,例如并行管道(例如JENKINS-59871)。
答案 4 :(得分:-3)
另一种语法是$ ENV:xxxx
node {
echo "Running $ENV.BUILD_ID on $ENV.JENKINS_URL" }
这对我有用