code

2014年9月3日 星期三

Jenkins Job 錯誤的應對(一):逾時問題處理

作業逾時,可能會是在Jenkins中第一個讓你冒冷汗的麻煩

Jenkins 本身是沒有逾時設定的


排程作業,首先要評估執行頻率,同時執行時間應小於頻率,以下圖來看這是一個每十分鐘執行一次的作業,執行時間約五分鐘。
期望值
但可能會被各種因素擾亂,常見的像網路傳輸時間,主機負載過重,程式本身問題。導致執行時間出現預期外的增長,而去影響到正常排程作業
排程等待Job只會有一個,其餘將被捨棄執行
實際上


執行超時問題是非常討厭的

  1. 在執行結束前,Jenkins 在同個Project 中不會再執行新的Job
  2. 它不是錯誤,而且Job還沒結束,所以不會有任何通知
  3. 你永遠不知道什麼時候會發生,但通常會影響到你的假期


解決的方法,我們要讓Jenkins支援作業逾時


Build-timeout Plugin


在Jenkins上的好處,就是像這種常見的問題,解決方式都是抓個Plugin回來就完成8,90%了,一樣在Jenkins的管理外掛程式中,找到build timeout plugin。直接安裝下去。


回到Project的設定中,可以發現多了新的設定

build timeout plugin 最基本的設定


Time-out strategy 逾時定義
  • Absolute 從Job開始起的 N 分鐘後算逾時
  • Elastic 可定義以之前 x 次成功的時間平均,乘上 150%-400% 的時間為逾時時間。或直接定義逾時分鐘
  • Likely stuck 老實說沒用過,也不建議用此選項
  • No Activity 當終端機輸出畫面沒有再輸出後的幾秒後,定義為逾時

Time-out actions
  • Abort the build 取消 Job,這選項並不會觸發 Job Failed 的事件
  • Fail the build 建置失敗,如果工作逾時你希望觸發事件,如發送信件通知,那應該標記為Fail

讓你的Jenkins可以設定作業逾時,這個是很重要的設定,因為你不知道它何時會變成一頭脫韁野馬,平均10秒的程式跑了10天還沒跑完,這個是血淋淋的慘痛歷程

補充:這篇寫完後的當晚,有一個沒設定逾時的Project就發生Job hangs了
無法預測何時會發生超時事件


沒有留言:

張貼留言