Jenkins中對pending的判斷

場景分析


在實際部署Jenkins環境中,常常遇到多個作業相互觸發的場景。

如圖1,假設作業A與作業C在完成指定操作后,觸發作業B執行,那么在已有一個作業運行情況下,從C的觸發開始,串行作業B勢必會有3個構建在隊列中。消除第一個pending以外的構建便是本文的目標。


圖1 B作業隊列3個構建阻塞


實現方式


首先你需要知道Jenkins本身有API供用戶解析,包括作業的API與具體某次構建的API。

http://JENKINS_URL/job/JOB_NAME/api

Jenkins的API可以解析為JSON或XML格式,通過判斷pending字符串是否存在于API解析結果中,容易實現本文目標。


實現代碼


以下便是通過對pending的判斷,來決定是否再次觸發目標作業的具體代碼:

pending_status=`curl --user USERNAME:PASSWD http://JENKINS_URL/job/JOB_NAME/api/json`
if echo $pending_status | grep \"queueItem\":null
then
? ? curl --user USERNAME:PASSWD http://JENKINS_URL/job/JOB_NAME/build?token=TOKEN
? ? while [ 1 ]; do
? ? ? ? job_status=`curl --user USERNAME:PASSWD http://JENKINS_URL/job/JOB_NAME/api/json`
? ? ? ? if echo $job_status | grep \"pending\"
? ? ? ? then
? ? ? ? ? ? sleep 1
? ? ? ? else
? ? ? ? ? ? break
? ? ? ? fi
? ? done
else
? ? echo "Pending...Skip Calling A New Job."
fi

1. 判斷目標作業是否有構建處于隊列中;

2. 若有,則跳過再次觸發,進入后續操作,否則:

3. 觸發目標作業構建;

4. 輪詢目標作業被觸發后的狀態,直至其真正開始后,跳出循環,進入后續操作。


*? 通常,后續的操作是輪詢該作業的狀態等,此處不再贅述。若有不詳之處還望指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 軟件的持續集成工具之一,易上手,功能強大,話不多說,干貨奉上。我的博客地址:http://blog.lzoro.c...
    格子Lin閱讀 12,276評論 10 41
  • 準備工作 Jenkins的安裝 Jenkins依賴于Java環境,首先需安裝和配置Java環境(PS:在下載的時候...
    _Artillery閱讀 4,526評論 6 22
  • 1、傳統我們的項目開發模式是產品調研提出需求,開發團隊研究決定開發方案選型。然后開始一個周期的開發,模塊開發完成之...
    張熙閱讀 12,424評論 2 42
  • 首先想說說這個名字。結婚兩年了,感覺結婚后的自己變得越來越蔫兒。做什么都提不起興趣,每天都碌碌無為,沉浸在一種焦慮...
    不務正業的阿姨閱讀 239評論 0 0