ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Jenkins 获取构建队列排队时间 queueDuration

2022-05-21 12:01:45  阅读:191  来源: 互联网

标签:插件 队列 排队 构建 获取 job queueDuration Jenkins


背景

我们最近在对 Jenkins 的构建做一些监控,包括 build 时长、队列排队时长、构建结果(成功/失败/abort)等数据。

我们在 Jenkins Shared Library 中获取这些数据,然后通过 HTTP 请求的方式,回调给另外一个监控 Server。

Build 时长、构建结果(成功/失败/abort)等数据,相对好获取,在 Jenkins 的全局变量参考中,有相应的说明:

全局变量中的 currentBuild 中,有 duration 和 result 字段,分别代表构建时长和构建结果。

但是对于排队时长,却没有找到相应的字段。于是这个监控数据一时半会儿还不好拿。

Metrics 插件

对于这个问题,Google 了下,在 Stack Overflow 上找到了答案:https://stackoverflow.com/a/31156114

如果你的 Jenkins 安装了Metrics 插件,那么这个数据是相对容易获取的。

这个插件是安装 Jenkins 时推荐安装的,如果你的 Jenkins 没有安装,可以参考插件首页:https://plugins.jenkins.io/metrics/

安装这个插件后,可以在 build 的详情页中看到排队时间、构建时间等数据,如下图:
file

其中红框中的 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 发布

标签:插件,队列,排队,构建,获取,job,queueDuration,Jenkins
来源: https://www.cnblogs.com/wxweven/p/16294770.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有