背景
我們最近在對 Jenkins 的構建做一些監控,包括 build 時長、佇列排隊時長、構建結果(成功/失敗/abort)等資料,
我們在 Jenkins Shared Library 中獲取這些資料,然后通過 HTTP 請求的方式,回呼給另外一個監控 Server,
Build 時長、構建結果(成功/失敗/abort)等資料,相對好獲取,在 Jenkins 的全域變數參考中,有相應的說明:
- 訪問鏈接如下:http://localhost/job/test-job/pipeline-syntax/globals
- 注意,將 ${your-job} 替換成任意的 job 名,即可看到 Jenkins 自帶的全域變數參考頁面
全域變數中的 currentBuild 中,有 duration 和 result 欄位,分別代表構建時長和構建結果,
但是對于排隊時長,卻沒有找到相應的欄位,于是這個監控資料一時半會兒還不好拿,
Metrics 插件
對于這個問題,Google 了下,在 Stack Overflow 上找到了答案:https://stackoverflow.com/a/31156114 ,
如果你的 Jenkins 安裝了Metrics 插件,那么這個資料是相對容易獲取的,
這個插件是安裝 Jenkins 時推薦安裝的,如果你的 Jenkins 沒有安裝,可以參考插件首頁:https://plugins.jenkins.io/metrics/ ,
安裝這個插件后,可以在 build 的詳情頁中看到排隊時間、構建時間等資料,如下圖:

其中紅框中的 3.3 秒 waiting; 就是佇列排隊時間,
獲取佇列排隊時間
通過 Metrics 插件,我們能看到佇列排隊時間了,接下來就是看怎么通過代碼的方式獲取到這個時間了,
Jenkins 提供了 2 中獲取佇列排隊時間的方式:
- rest api 方式
- groovy script 方式
下面將分別介紹,
Rest Api 方式
訪問構建詳情頁的 /api/json,介面,比如:http://localhost/job/test-job/14/api/json?pretty=true&depth=2 ,就可以看到相關的欄位 queuingDurationMillis:
{
"_class": "jenkins.metrics.impl.TimeInQueueAction",
"queuingDurationMillis": 3334
}
Groovy script 方式
Rest API 方式是可以獲取到排隊時間,但是這個 json 回傳的資料結構比較復雜,而且回傳的資料也很多,
Jenkins 提供了Groovy script 方式,而我們的 shared library 中,正好寫的是 Groovy Script,所以我們用這種方式,
代碼如下:
def build = currentBuild.rawBuild
def action = build.getAction(jenkins.metrics.impl.TimeInQueueAction.class)
def queuingDurationMillis = action.getQueuingDurationMillis()
println("queuingDurationMillis: " + queuingDurationMillis)
可以看到, Groovy Script 的方式,也是去 metrics 插件中獲取的資料,
結束語
好了,以上就是 Jenkins 獲取構建佇列排隊時間 queueDuration 的方法,如果想探討更多關于 Java 和 Jenkins 的技術,歡迎與我聯系,
我是梅小西,最近在某東南亞電商公司做 DevOps 的相關事情,從本期開始,將陸續分享基于 Jenkins 的 CI/CD 作業流,包括 Jenkins On k8s 等,
如果你對 Java 或者 Jenkins 等感興趣,歡迎與我聯系,微信:wxweven(備注 DevOps)
本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479206.html
標籤:Java
上一篇:Springmvc基礎及應用
