jenkins env变量是否在分支和master之间共享?

时间:2017-09-25 09:56:18

标签: git jenkins groovy jenkins-pipeline

这是我设置某些参数后触发构建的Jenkins管道代码的一部分,我也是从master和分支设置这些env变量。我知道我的主人和分支机构可以独立(同时)触发构建。

他们(分支构建和主构建)是否有可能共享Jenkins公开的这个env变量?或者他们有自己的env变量副本?

// determine current quadrant using system time
    def quadrant = getCurrentQuadrant()
    env.TRIGGER_TYPE=getTriggerType()
    echo "Current quadrant: " + quadrant + " | triggertype: " + env.TRIGGER_TYPE
    env.ENV = "${environment}"

//if the build is triggered by timer in first/fourth quarter of 24 hrs day then change default trigger<dev> to <staging>
if  ( (quadrant == 0 || quadrant == 3 ) && env.TRIGGER_TYPE =='Started by timer') { 
    env.ENV = "staging"
}

1 个答案:

答案 0 :(得分:1)

共享的环境变量:“Working with the Environment”:JENKINS_URL和其他人

规则是:

  
      
  • 顶级管道块中使用的环境指令将应用于管道中的所有步骤。
  •   
  • 在舞台中定义的环境指令仅将给定的环境变量应用于舞台中的步骤。
  •   

因此,如果您的步骤涉及多个分支,则它们将共享相同的环境变量 但是如果这些分支是独立使用的,那么在同一管道工作的单独运行中,它就不会 另一种方法是将parameters用于特定于运行时的值。

您可以找到another approach in this gist

stage('Deploy application') {
    // This is the cool part where you deploy. Here, you can specify builds you want to deploy
    switch (env.BRANCH_NAME) {
        case "master":
            sh("env >> .env")
            sh("docker run --env-file .env --rm ${project} ./gradlew clean build assembleRelease crashlyticsUploadDistributionRelease")
            sh("rm -rf .env")
            break
        case "dev":
            sh("env >> .env")
            sh("docker run --env-file .env --rm ${project} ./gradlew clean build assembleDebug crashlyticsUploadDistributionDebug")
            sh("rm -rf .env")
            break
    }
}

在具有--env-file .env的泊坞窗中运行Jenkins管道步骤将允许构建共享存储在.env中的一组公共变量。