2017-05-17 80 views

回答

0

在新的管道中,您可以使用try-catch來實現這一點。

node{ 
    try{ 
     build job: 'system-check-flow' 
    }  
    catch (err){ 
     echo "system-check-flow failed" 
    } 
    try{ 
     build job: 'job2' 
    }  
    catch (err){ 
     echo "job2 failed" 
    } 
} 

這裏它將構建'系統檢查流程'作業。如果失敗,將捕獲錯誤,忽略,然後着手構建「作業2」

+2

雖然這看起來像會起作用,但它不是使用聲明式管道語法來構建的。 – Sven

2

要忽略在聲明管線中的失敗一步你基本上有兩種選擇:

  1. 使用script一步,try-catch塊(類似於前面的命題通過R_K但在聲明樣式)
stage('someStage') { 
    steps { 
     script { 
      try { 
       build job: 'system-check-flow' 
      } catch (err) { 
       echo err 
      } 
     } 
     echo currentBuild.result 
    } 
} 
  • 使用catchError
  • stage('someStage') { 
        steps { 
         catchError { 
          build job: 'system-check-flow' 
         } 
         echo currentBuild.result 
        } 
    } 
    

    在這兩種情況下,構建也不會例外,在中build job: 'system-check-flow'中止。在這兩種情況下,echo步驟(以及其他任何後續步驟)都將被執行。

    但是在這兩個選項之間有一個重要區別。在第一種情況下,如果try部分引發異常,則整體構建狀態將不會更改(因此echo currentBuild.result =>SUCCESS)。在第二種情況下,您的整體構建將失敗(因此echo currentBuild.result =>FAILURE)。

    這一點很重要,因爲你總是可以在第一種情況下(通過設置currentBuild.result = 'FAILURE')失敗的整體構建,但你不能修復建立第二個選項(currentBuild.result = 'SUCCESS'將無法​​正常工作)。

    相關問題