code

2014年10月8日 星期三

Jenkins 作業錯誤重試 - Naginator Plugin

大家有碰過軟體平常用的好好的,突然間就壞掉了?處理的SOP,關掉再試一次,不行?重開Windows再試一次,還不行?只能打電話去機房罵人了『你們肯定有包乖乖剛剛過期啦!快找出來』。最後一項,解決了問題我還能理解,但前兩項為什麼解決了問題?很可怕,不要問,因為我答不出來……

為什麼出錯大家會想再試一次?因為經驗告訴我們,這通常是有用的!

前一篇 [ Jenkins 作業逾時/超時處理 - Build-timeout Plugin ] 我們提到了作業逾時的問題,像這類的問題,95%應該重試都可以回復正常,有可能就只是當時網路有點不順暢罷了。雖然你只要回到Jenkins,再親自按下建置,這作業就又會重新開始運作,但我真心的希望Jenkins至少能幫我再試一次!本篇要介紹的是Naginator Plugin,專門幫我們在作業失敗時安排重試。

本篇使用外掛 

目標情境

作業失敗時,重試建置

第一步,認識Naginator Plugin設定

Naginator plugin 基本設定
重試,是屬於作業完成後(post-build) 的設定,所以我們可以在『新增建置後動作』的裡面找到『Retry build after failure』,設定的項目不多

  • Rerun build for unstable builds as well as failures除了建置失敗()外,建置不穩定()也會重試
  • Rerun build only for failed parts on the matrix 在Matrix專案下,只會針對錯誤的部份重試,不會重跑整個Matrix
  • Delay before retrying build指定重試等待時間
  • Maximum number of successive failed builds設定重試次數上限,無若設定就是無限次,所以請記得一定要設定
其中重試等待時間還有子項目設定
  • Fixed
    指定的固定的等待時間
  • Progressive (bug中……預計在10/16更新)
    每次重試等待時間不斷累加,或達上限值

第二步,配合逾時,測試是否重試

模擬3秒就算逾時的情境
使用固定的等待時間,30秒後重啟作業
It's work! 重試的作業會有特別的圖示標記


重試是很簡單,但如果造成問題時也會很麻煩,首先無止盡的重試是絕對不可能有用的。再來,若是在負載繁重的作業點的重試,是否引發資源不足?讓結果又回到上一篇死結的現象。重試不一定要在幾分鐘內開始,你可以讓他拖上一陣子是沒問題的。

逾時與重試,這兩篇是很簡單議題。但對一套商轉的Jenkins服務,如果需要人盯著是否有逾時,然後再手動去中止與重啟作業……這就不是Jenkins的美意了,然而我真的為這件事盯了三個月之久,那是個辛苦的往事……

沒有留言:

張貼留言