1. 程式人生 > >jenkins pipline 如何禁止任務並行

jenkins pipline 如何禁止任務並行

背景: 我測試的一個專案CI包括好幾個步驟,但是有的步驟是不能並行的,否則會互相影響

處理過程:

【方案一】:不推薦此方案

在每個步驟裡面的shell指令碼中加程序判斷

示例:比如本任務有4個步驟,第2個步驟啟動的時候會啟動程序test2

那我在執行第2個步驟之前先判定程序test2是否存在,如果存在就迴圈等待直到程序消失

結果:雖然解決了大部分情況下的任務衝突,但是在兩個任務在短時間內相繼啟動還是出問題了,原因是第2個步驟程序終止後還有後續生成報告的操作,這個需要步驟2生成在報告目錄的資料,但我的指令碼設定的是步驟2一旦啟動就清空報告目錄,這就導致上一個任務程序釋放但還沒來的及讀取報告時,報告資料就被並行的任務清掉了,最終失敗

【方案二】:推薦方案

解決方案:給步驟設定鎖,讓任務無法並行

在Jenkinsfile裡面給步驟加鎖,這樣加鎖的步驟就只能串行了,從而避免上述影響

示例程式碼:

 
  
  
stages {

    stage('stage-one') {
        steps {
            echo "step 1"
        }
    }
    stage('stage-two') {
      steps {
        lock ('Lock Stage-Two'){
            echo "step two"
        }
      }
    }

}