2017-09-25 74 views
2

这是我的Jenkins管道代码的一部分,用于在设置特定参数后触发构建,我也从主分支和分支设置这些env变量。我知道我的主人和分支可以独立(同时)触发构建。jenkins 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

有环境变量共享: “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泊坞窗一詹金斯管道的步骤将允许构建共享一组通用的存储.env变量。

+0

另请参阅http://codegist.net/search/jenkinsfile-build-parameters/6和https://issues.jenkins-ci.org/browse/JENKINS-41748 – VonC