python操作jenkins初探

2022-06-21 16:19:19 浏览数 (1)

前言

最近在工作中需要用到在后端代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作。

由于我们的后端项目是基于python开发的,所以需要python能调用的类库。经过一些调研锁定了"python-jenkins"这个类库。

本文会介绍,"python-jenkins"的一些基础操作,这些操作基本上能满足工作中绝大使用场景。

介绍

python-jenkins是Jenkins REST API的Python包装器,旨在提供一种更传统的Python 方式来控制Jenkins服务器。它提供了一个更高级别的 API,其中包含许多便利功能。

  • 创造新job
  • 复制现有job
  • 删除job
  • 更新job
  • 获取job的构建信息
  • 在工作上开始构建
  • 创建节点

在日常使用中,python-jenkins能满足所有调用jenkins的操作的需求,只有对API使用方法熟练使用,基本上10分钟就能上手使用。

推荐几个实用的文档,使用过程中可以查询使用。

代码仓库: https://github.com/openstack-archive/python-jenkins

官网: https://pypi.python.org/pypi/python-jenkins/

Doc: http://python-jenkins.readthedocs.io/en/latest/index.html

安装

推荐使用pip命令行安装,出现如下图说明安装成功。

代码语言:javascript复制
sudo pip install python-jenkins

常用操作

构建job

创建jenkins连接

需要定义远程的jenkins master server的url以及port。 jenkins的账号和密码,用于连接jenkins服务器。

代码如下:

代码语言:javascript复制
# 定义远程的jenkins master server的url,以及port
jenkins_server_url = 'http://106.75.xxx.xxx:8080/'
# 定义用户的User Id 和 API Token,获取方式同上文
user_id = 'admin'
api_token = 'xxxxx'
# 实例化jenkins对象,连接远程的jenkins master server
server = jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
print(server.get_whoami())

创建jenkins后,返回jenkins实例,通过server就可以调用任何API方法。

构建job(不带构建参数)

不带构建参数的job,本身这个job在配置的时候,不需要任何构建参数,直接点构建即可。

代码如下:

代码语言:javascript复制
server.build_job(name='android_dev')
构建job(带构建参数)

带构建参数,这个job在配置的时候,会配置需要的构建参数,如下图:

代码如下:

代码语言:javascript复制
param_dict = {"name": "mike"}
server.build_job(name='android_dev_parameters', parameters=param_dict)

如构建成功,查看控制台输出,能看到代码中传递的参数"mike"。

创建job

创建自由风格的job

jenkins中比较常用的job是自由风格的job,特点是job配置可以使用shell脚本执行一些参数。

需要唯一的job名称,如果已存在的job会报错。

还需要配置文件模版,提供字符串模版,如下图:

代码如下:

代码语言:javascript复制
print(server.create_job(name='android_dev_temp', config_xml=Jenkins_TEMP))

创建pipeline的job 

在jenkins2.x开始流行pipeline的写法,以代码的方式来进行job的构建。

从使用上其实和普通job配置,没什么太大区别。

pipeline的配置模版如下图:

代码如下:

代码语言:javascript复制
print(server.create_job(name='android_dev_temp_pipeline', config_xml=pipelineBuildTemp))

查询job

获取job信息

查询job信息的名字必须是存在的,如果不存在会报错。

代码如下:

代码语言:javascript复制
print(server.get_job_info(name='android_dev_parameters'))

查询出来的信息,包含了描述、任务状态、构建节点等信息。

获取job的最后次构建号

在构建完成任务后,不会返回构建号,所以需要执行获取job的最后次构建号的方法。

通过get_job_info方法的返回数据结构中可以拿到最后次构建号。

代码如下:

代码语言:javascript复制
#获取job名为job_name的job的最后次构建号
print(server.get_job_info(name='android_dev_parameters')['lastBuild']['number'])

输出: 3
获取job的某次构建的执行结果状态

代码如下:

代码语言:javascript复制
#获取job名为job_name的job的某次构建的执行结果状态
build_number = server.get_job_info(name='android_dev_parameters')['lastBuild']['number']
print(server.get_build_info(name='android_dev_parameters', number=build_number)['result'])

结果状态有几种状态:

  • 构建成功:SUCCESS
  • 构建失败:FAILURE
  • 构建中:None
获取job的某次构建是否还在构建中

代码如下:

代码语言:javascript复制
print(server.get_build_info(name='android_dev_parameters',number=build_number)['building'])

构建状态有几种状态:

  • 构建中: True  
  • 非构建中: False  
获取job的构建日志

代码如下:

代码语言:javascript复制
print(server.get_build_console_output(name="auto_blog", number=14))

结语

在之前的项目中,我们会把接口自动化测试、性能压测脚本配置在jenkins服务器上,后端服务的业务逻辑中会动态创建job、构建job、查看构建日志等。

python-jenkins的出现极大了提高的操作jenkins的便捷性,希望大家工作中能用到~

0 人点赞