背景
我们最近在对 Jenkins 的构建做一些监控,包括 build 时长、队列排队时长、构建结果(成功/失败/abort)等数据。
我们在 Jenkins Shared Library 中获取这些数据,然后通过 HTTP 请求的方式,回调给另外一个监控 Server。
Build 时长、构建结果(成功/失败/abort)等数据,相对好获取,在 Jenkins 的全局变量参考中,有相应的说明:
- 访问链接如下:http://localhost/job/test-job...
- 注意,将 ${your-job} 替换成任意的 job 名,即可看到 Jenkins 自带的全局变量参考页面
但是对于排队时长,却没有找到相应的字段。于是这个监控数据一时半会儿还不好拿。
Metrics 插件 对于这个问题,Google 了下,在 Stack Overflow 上找到了答案:https://stackoverflow.com/a/3... 。
如果你的 Jenkins 安装了Metrics 插件,那么这个数据是相对容易获取的。
这个插件是安装 Jenkins 时推荐安装的,如果你的 Jenkins 没有安装,可以参考插件首页:https://plugins.jenkins.io/me... 。
安装这个插件后,可以在 build 的详情页中看到排队时间、构建时间等数据,如下图:
文章图片
其中红框中的
3.3 秒 waiting;
就是队列排队时间。获取队列排队时间 通过 Metrics 插件,我们能看到队列排队时间了,接下来就是看怎么通过代码的方式获取到这个时间了。
Jenkins 提供了 2 中获取队列排队时间的方式:
- rest api 方式
- groovy script 方式
Rest Api 方式
访问构建详情页的 /api/json,接口,比如:http://localhost/job/test-job... ,就可以看到相关的字段
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 的技术,欢迎与我联系。
【Jenkins 获取构建队列排队时间 queueDuration】我是梅小西,最近在某东南亚电商公司做 DevOps 的相关事情。从本期开始,将陆续分享基于 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。
如果你对 Java 或者 Jenkins 等感兴趣,欢迎与我联系,微信:wxweven(备注 DevOps)
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
推荐阅读
- Jenkins插件安装失败,PKIX path building failed
- Jenkins流水线整合钉钉
- Jenkins入门配置
- Jenkins安装部署使用
- 适用于小型企业的7种最佳Jenkins托管平台
- 如何创建你的第一个Jenkins管道()
- jenkins-APP打包页面展示二维码
- Jenkins build java app under redhat
- Jenkins