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

数据开
• 阅读 1561

背景

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

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

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

  • 访问链接如下:http://localhost/job/test-job...
  • 注意,将 ${your-job} 替换成任意的 job 名,即可看到 Jenkins 自带的全局变量参考页面

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

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

Metrics 插件

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

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

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

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

其中红框中的 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 的技术,欢迎与我联系。


我是梅小西,最近在某东南亚电商公司做 DevOps 的相关事情。从本期开始,将陆续分享基于 Jenkins 的 CI/CD 工作流,包括 Jenkins On k8s 等。
如果你对 Java 或者 Jenkins 等感兴趣,欢迎与我联系,微信:wxweven(备注 DevOps),公众号:
Jenkins 获取构建队列排队时间 queueDuration

本文由博客群发一文多发等运营工具平台 OpenWrite 发布
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Jenkins部署失败后快速回滚到指定版本
  jenkins部署过程中,有时会遇到构建后项目启动失败的情况,如果情况紧急那就要快速回滚代码,手动回滚是相当的麻烦。可以用Jenkins结合Shell脚本来完成一键回滚操作。新建一个maven工程设置历史版本的构建包个数,方便本次构建失败后能回滚回去!(https://oscimg.oschina.net/oscn
Stella981 Stella981
3年前
Jenkins 配置 gitlab push 自动发版
测试环境发版,每次登录jenkins点构建很麻烦,jenkins的构建触发器可以解决这个问题配置也不复杂,这里简单记录一下:1.勾选构建触发器中相应的触发方式,我们用的是gitlab!(https://oscimg.oschina.net/oscnet/b179d5f09a7683c4edd623bb8c52a488129.jpg)
Stella981 Stella981
3年前
Jenkins+Git+Maven简单教程
关于Jenkins1.什么是JenkinsJenkins是一个可拓展的持续集成(CI)引擎(ContinuousIntegrationEngine)。主要用于:  1.持续、自动地构建、测试软件项目 2.监控一些定时执
Stella981 Stella981
3年前
Jenkins 配置邮件通知步骤
Jenkins配置邮件通知前言可以在Jenkins中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题。Jenkins邮件通知功能的插件主要包括:MailerPlugin(默认的发送邮件插件)EmailExtensionPlugin(功能更强大的发送邮件插件)建议同时安装这两个插件。下面来介绍如何在
Stella981 Stella981
3年前
Jenkins+RF持续集成测试(一) 环境搭建
通常在自动化测试中,我们需要对自动化测试用例定时构建,并生成报告并通过邮件发给指定的人。最佳工具选择莫过于Jenkins了。通过Jenkins集成robotframework插件,我们能非常方便的定时从git/svn上拉取最新的自动化测试用例,然后执行用例并把最终结果以测试报告的形式发给指定的人群。下面我就来详细为大家介绍一下Jenkins集成RF插件
Stella981 Stella981
3年前
Jenkins自动发送邮件配置及定时构建
前言在配置之前,我们需要安装好Jenkins,对于如何安装不在赘述,看我之前一篇安装教程(或者找度娘,教程很多)。接下来我们开始详细讲解build运行完成后自动发送邮件和定时自动构建build系统配置安装插件我们在安装Jenkins的时候可以选择安装,也可以在安装之后选择安装需要的插件1.点击Jenkins面板\
Stella981 Stella981
3年前
Jenkins详细教程
  最近花了一段时间研究jenkins这个工具。所以写下这篇文章,算是当做记录吧!一、jenkins是什么?    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,
Wesley13 Wesley13
3年前
Java中的队列同步器AQS
一、AQS概念  1、队列同步器是用来构建锁或者其他同步组件的基础框架,使用一个int型变量代表同步状态,通过内置的队列来完成线程的排队工作。  2、下面是JDK8文档中对于AQS的部分介绍  publicabstractclassAbstractQueuedSynchronizerextendsAbstract
Stella981 Stella981
3年前
Jenkins入门之执行定时任务
通过前面我们讲解了如何通过Jenkins执行windowscommand,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下BuildNow按钮来执行任务构建的,有些时候我们可能需要定时执行一些脚本,Jenkins也是支持的,下面就讲一下如何使用Jenkins执行定时任务.我们新建一个自由式(FreeSt
Stella981 Stella981
3年前
Jenkins+Ant自动布署war
一、jenkins配置在jenkins里面配置好ant版本构建完成后执行shell脚本重启tomcat二、build.xml配置1.从官网http://ant.apache.org/bindownload.cgi获取最新的tar(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Stella981 Stella981
3年前
Jenkins Build Radiators(构建发射源)
informationradiators(信息发射源)的概念通常被用在敏捷的圈子里。据敏捷专家AlistairCockburn所说:一个信息发射源是一个贴在一个地方的显示器,当人们工作或路过时能够看到它。它给读者展示他们关系的信息而不用问别人一个问题。这意味着更多的交流和更少的打断。在一个CI服务器的环境中