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


    背景

    我们最近在对 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 发布

  • 相关阅读:
    1092 最好吃的月饼 (20 分)
    pat 乙级 1093 字符串A+B (20 分)
    pat乙级 1091 N-自守数 (15 分)
    查询GC日志、动态年龄计算
    四大特性以及事务的隔离级别
    R语言学习
    利用python进行数据分析3_Pandas的数据结构
    python_109_切片补充和list函数
    爬虫_python3_requests
    利用python进行数据分析1_numpy的基本操作,建模基础
  • 原文地址:https://www.cnblogs.com/wxweven/p/16294770.html
Copyright © 2020-2023  润新知