2017-09-08 65 views
1

我們如何獲得Jenkins管道中前一階段的狀態。例如:我的示例流水線如下:如何獲得管道中特定階段的狀態

pipeline { 
    agent 
    { 
     node { 
       label 'master' 
       customWorkspace "${env.JobPath}" 
       } 
    } 

    stages 
    { 
     stage('Start') { 
      steps { 
       sh 'ls' 
      } 
     } 

     stage ('set_env') { 
      steps { 
       // script to set environment. 
      } 
     } 

     stage ('Build') { 
      steps { 
       // script to build. 
      } 
     } 

     stage ('Send_mail') { 
      steps { 
       // script to send mail. 
      } 
     } 

     stage('End') { 
      steps { 
       sh 'ls' 
      } 
     } 
    } 
} 

如何獲取管道中特定階段的狀態。例如:我想根據「構建」階段是成功還是失敗來做出某些決定。

是否有任何環境變量跟蹤每個階段的狀態,或者有一個Jenkins REST API可以幫助我實現這一目標。

謝謝!

+0

通過'currentBuild.result',您可以設置整個作業的狀態。但是如果你只想在你的管道中做出決定:如何使用常規的groovy變量作爲標誌?如果在全局上下文中設置一個變量,則可以在同一個構建的不同階段中使用它。或者,也許我真的沒有正確的問題? – fishi

+0

感謝fishi您的建議。請求你用一個示例代碼來闡述你的邏輯。謝謝 – Yash

+0

我正在尋找同樣的事情,因爲我想在構建結束時做某種報告,並且需要訪問所有階段並獲得每個階段的結果。到目前爲止,我無法找到任何這樣的代碼。 – sorin

回答

0

詹金斯聲明性管道是在前詹金斯管道方法之上的自以爲是的語法。這意味着您也可以將jenkins聲明式管道視爲帶有額外語法糖的groovy腳本。所以你可以自由使用變量。正如我在上面的評論中提到的那樣,您可以通過currentBuild.result設置整個工作狀態,但是如果您想在階段之間的同一工作中做出決定:只需使用常規變量來指示前一階段的狀態。以你的例子:

pipeline { 

    def didSucceed = true 

    agent 
    { 
     node { 
       label 'master' 
       customWorkspace "${env.JobPath}" 
       } 
    } 

    stages 
    { 
     stage('Start') { 
      steps { 
       sh 'ls' 
      } 
     } 

     stage ('set_env') { 
      steps { 
       // script to set environment. 
       didSucceed = true // Here you indicate whether stuff actually worked.. 
      } 
     } 

     stage ('Build') { 
      steps { 
       if (didSucceed) { 
        // script to build. 
       } else { 
        // Procedure in case of previous error.. 
       } 
      } 
     } 

     stage ('Send_mail') { 
      steps { 
       // script to send mail. 
      } 
     } 

     stage('End') { 
      steps { 
       sh 'ls' 
      } 
     } 
    } 
} 

你也可以使用組合when語句和布爾變量留在一個更聲明的方式。