jenkins pipline 如何禁止任務並行
阿新 • • 發佈:2018-12-26
背景: 我測試的一個專案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" } } } }