2017-09-25 40 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