从Jenkins中拉取构建过程数据进行分析的方法

477 阅读3分钟

在Jenkins中我们创建日历视图的时候,能够看到每次构建在时间线上面的分布,那么我就有一个疑惑,这个分布的数据是不是可以直接提取出来。如果能够得到这个数据,无疑是能够极大促进工程分析效率的。

分析数据来源

发挥一贯的方法,在页面上查看浏览器的请求信息。

找到一个events请求里含有大量的工程构建信息数据。

  image.png

通过点击页面上的按钮,可以观察到这个数据是按照日历上的日期进行分类的,系统在我们操作界面时,会读取月视图上一个日历月的数据。(一个日历月是指的还会包含1号之前的几天以凑满一周的界面,以及月底之后带上下个月的几天凑满6周的数据,也就是42天)

可以看到6月视图的请求的路径:

/view/CA/events?start=2023-05-29&end=2023-07-10&_=1687959108872

视图上是5月29号到7月9号,所以可以推断最后一天是个开区间。最后的时间戳参数不是必要的,只是在区分请求。

 

代码读取数据

直接在代码中仿制拉取这个请求。选定时间范围是6-10到6-14。

# coding:utf-8  
import requests  
from requests.auth import HTTPBasicAuth  
  
host = '106.14.132.184'  
auth = HTTPBasicAuth(username='bob', password='110c70ea8f41063e377aca53007a1ca2e4')  
jenkins_url = f'http://{host}:8080'  
  
data_url = f'{jenkins_url}/view/CA/events'  
params = {  
    'start': '2023-06-10',  
    'end': '2023-06-14'  
}  
  
response = requests.get(data_url, params=params, auth=auth)  
print(response.status_code)  
print(response.text)

得到的数据包含6月10号到13号这四天的数据。

数据项分析

拉最后一条数据进行分析 image.png

image.png 其中:

title部分的值标名了工程和运行的编号

url可以转换后用于后续的构建信息提取。

duration是这次构建的耗时,单位是毫秒

state是这次构建的状态。

job里面的title就是完全写明了工程的名称。

后面两个展示构建前后次的信息,无需要不用处理。

allDay标识是否一整天都在跑,这个信息我这边没用到,读者有用的可以看看。这个日历视图是以开始时间为分界线往图形上面放工程的,所以每次构建在界面上是没有时间长度的,都是一块差不多尺寸的记录。

 

用途

有了这个,我们完全可以简化前一篇文章的操作流程,省去我们的监控流程。只需要每天读一下前面一天的数据,做一个增量的统计也不需要额外存储了。还是很有用的。因为这个数据只有日历视图里可以通过这个events请求得到,所以我们必须要在Jenkins中装上Calendar view的插件并建立一个日历视图,这是先决条件。这个视图同样可以添加过滤器,以实现对指定任务的监控。