2017-02-22 54 views
0

我有一個流水線作業和兩個Maven的工作,如下圖所示。如何從流水線作業參數傳遞給行家作業詹金斯

node { 
    def res 
    stage('Build') { 
     node('rhel6') { 
      res = build job: "Build", parameters: 
           [ 
             string(name: 'jobname', value:'master'), 
             string(name: 'val1', value: 'MyValue') 
           ] 
     } 
    } 
    stage('Deploy') { 
     node('rhel6') { 
      build job: 'Deploy', parameters: 
        [ 
          string(name: 'resName', value: "$res.buildVariables.filename") 
          string(name: 'firstVal', value: 'First_Argument') 
        ] 
     } 
    } 
} 

正如你可以從我的管道的定義看,我有一個管道的工作,兩項工作在流水線階段運行。 「構建」作業需要兩個字符串參數和構建。

的部署作業需要從構建工作一個輸入和建立。

1)這是詹金斯流水線階段之間傳遞參數的正確方法嗎?我正在使用類似於this的方法。

2)如何參數在流水線作業映射到參數在實際的工作? 例如:在上面的流水作業中,在'Build'階段,我有jobname和val1作爲參數。這些參數如何映射到Build作業中的實際參數?

3)我如何從自動化工作DSL腳本該流水線作業的生成?我的意思是,如何在Jenkins中生成上述管道本身?

+0

請一次問一個問題。你能編輯這個問題嗎? – Jayan

+0

問題已連接。一個能夠回答的人應該能夠對剩下的兩個人提出一些想法。否則,我必須重複相同的代碼和問題三次。 – SalmanKhan

回答

2

要回答你的兩個首要問題:

  1. 是的,這是(一)正確的方式(S)來傳遞參數
  2. 你通過在下游的工作被簡單地理解爲變量的參數。在您的Build Maven作業中,您可以像使用任何變量一樣使用$jobname$val1。順便說一句,您可能想確保您的變量名稱足夠清晰,以免您的Maven作業中的變量用法含糊不清。

關於你的第三個問題,我不知道你問什麼,請你提供更多的信息,有點背景,等等?

在一般的方式,我不認爲創建一個管道,這只是其他作業的包裝點(在這裏構建和部署)。您應該考慮:

  • 將您的Maven作業轉換爲流水線Groovy代碼,以便您可以將其直接添加到當前的管道作業中。

事情是這樣的:

node('rhel6') { 
    def res 
    stage('Build') { 
     // Your build step here 
     sh "${env.mvnHome}/bin/mvn install" 
    } 
    stage('Deploy') { 
     // Your deploy step here 
     sh "${env.mvnHome}/bin/mvn deploy" 
    } 
} 

當然,這只是一個例子,但你明白這一點......

  • 鏈接你的兩個Maven的工作,而無需創建一個第三職業。您只需在Build Maven作業的末尾添加一個「Trigger parameterized build」即可完成此操作。

除非我失去了一些東西,似乎沒有意義的只是創建一個包裝,增加了什麼有用的東西你構建/部署工作...

+0

感謝您的回覆。當然,我可以使用觸發器參數化構建,但是當我將它用於多個級別時,它不起作用。如果最低級別的工作想要使用某個參數,我必須一直將參數從最頂層的工作傳遞到最底層的工作。 – SalmanKhan

+0

這與從實際管道傳遞參數有什麼不同?您能否解釋一下「多層次」的問題,我不確定我是否理解......您的意思是說您希望能夠不時地手動觸發您的下游工作? – Pom12

相關問題