詹金斯全局环境变量在Jenkinsfile中

时间:2016-12-20 04:57:47

标签: jenkins groovy jenkins-pipeline

如何在Jenkinsfile中调用全局环境变量?
例如,如果我有一个变量 -

 name:credentialsId 
 value:xxxx-xxxx-xxxxx-xxxxxxxxx

如何在groovy脚本中使用它?

我尝试了${credentialsId},但它没有用。它只会给出错误:

java.lang.NoSuchMethodError: No such DSL method '$' found among steps [ArtifactoryGradleBuild, ........

5 个答案:

答案 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" }

这对我有用