python-jenkins 调用方法实时返回构建进度

前文

  在devops的开发过程中,说到构建,jenkins是必不可少的,但是用jenkins来实现权限控制却不是那么理想,所以项目里可以基于jenkins来单独实现一套构建系统,而底层用的就是jenkins的api!而python也单独提供了库来封装jenkins-api,库名即是jenkins。相关文档如下:

  而在调用上述文档的方法是,无论是创建任务、获取任务结果、获取构建状态等等都是很顺利,但是当构建时长过长时却无法获取到构建进度,这个对用户体验就非常差,此时jenkins已经是对用户透明的,用户无法登录jenkins查看当前的构建进度,所以如何获取构建进度就成为当前所需,可惜官方文档并没有提供相关解决方法。

解决方法和思路

简单介绍

  可以简单地看下python-jenkins所提供的功能:
在这里插入图片描述
  可以看到并没有构建进度的返回,都是关于任务的增删改查,比如我要构建一个任务,步骤如下:

  1. 构建jenkins-server:server=jenkins.Jinkins(url,user,passwd)
  2. 获取下一个构建编号:build_number = server.get_job_info(task)[“nextBuildNumber”]
  3. 开始构建:output = server.build_job(task, parameters)
  4. 获取构建信息:build_info = server.get_build_info(task, build_number)
  5. 获取构建状态:is_building = build_info[“building”] —>如果这个值存在,则说明在构建,如果不存在则说明已经构建完成了,通过build_info[“result”]获取构建成功还是构建失败!

  根据上述就能轻而易举地搭建一个自定义的构建系统,但是并不能解决开篇所提的问题,那很明显,要获取构建进度,一定要从build_info即本次构建信息里取想办法!

解决方法

  通过观察获取的结果,我发现可以得到上一次的构建时间,所以可以”绕“过去来解决这个问题,即不一定要实时地获取当前最准确的构建进度,而是通过上一次的构建时间来打造一个构建进度,然后实时返回百分比!而这个方式得到的时间准确度也达到了90%,只有当网络异常或者构建方法异常时才会失效,不过这也足够了!详细代码如下:

job_info = app_builder.server.get_build_info(task,build_number)
jobstart_time = job_info['timestamp'] #任务启动时间
now_timestamp = int(round(time.time() * 1000)) #当前时间戳
estimatedDuration = job_info['estimatedDuration']  #上次构建时间
building_process = int(((now_timestamp - jobstart_time) /estimatedDuration) * 100) if estimatedDuration > -1 else -1 #如果estimatedDuration是-1,则说明是首次构建
if building_process>=100:building_process=99 #因为是预估,即使超过了100,也位于99
console_output = app_builder.get_build_console_output(build_number) #获取构建输出

  上面的注释写的很清楚,则每次可以通过前端轮询来一遍遍地获取档期构建百分比以及构建输出,这样用户就能清晰地看到当前构建进度!

总结

  项目用到了jenkins-api实现自定义系统的CI/CD,减少用户单独登录jenkins,并且能很好地管理用户的权限,效果还是不错的~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取Jenkins pipeline的构建信息,可以使用python-jenkins插件提供的方法。具体步骤如下: 1. 首先,导入python-jenkins模块: ```python import jenkins ``` 2. 创建一个Jenkins对象,并连接到Jenkins服务器: ```python server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token) ``` 其中,jenkins_server是Jenkins服务器的URL,user_id和api_token是用于身份验证的用户名和API令牌。 3. 使用Jenkins对象的get_job_info方法获取指定pipeline的构建信息: ```python job_info = server.get_job_info('pipeline_name') ``` 其中,pipeline_name是要获取构建信息的pipeline的名称。 4. 通过job_info可以获取构建信息的各种属性,例如构建号、状态、开始时间、结束时间等。可以根据需要提取所需的信息。 以下是一个完整的示例代码: ```python import jenkins # 连接到Jenkins服务器 server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token) # 获取指定pipeline的构建信息 job_info = server.get_job_info('pipeline_name') # 提取构建信息的属性 build_number = job_info['lastBuild']['number'] build_status = job_info['lastBuild']['result'] build_start_time = job_info['lastBuild']['timestamp'] build_end_time = job_info['lastBuild']['timestamp'] # 打印构建信息 print("Build Number:", build_number) print("Build Status:", build_status) print("Build Start Time:", build_start_time) print("Build End Time:", build_end_time) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值