Python-Jenkins 在 Jenkins 中的应用

**Author:**rab

**Python 版本:**3.9

**Jenkins 版本:**2.409

官方文档: https://python-jenkins.readthedocs.io/en/latest/


目录

    • 前言
    • 一、案例
      • [1.1 管理 Jenkins Version](#1.1 管理 Jenkins Version)
      • [1.2 管理 Jenkins Job](#1.2 管理 Jenkins Job)
        • [1.2.1 普通创建 Job](#1.2.1 普通创建 Job)
        • [1.2.2 获取当前用户的所有 Job](#1.2.2 获取当前用户的所有 Job)
        • [1.2.3 获取指定的 Job 配置信息](#1.2.3 获取指定的 Job 配置信息)
        • [1.2.4 构建指定的 Job](#1.2.4 构建指定的 Job)
        • [1.2.5 禁用指定的 Job](#1.2.5 禁用指定的 Job)
        • [1.2.6 复制指定的 Job](#1.2.6 复制指定的 Job)
        • [1.2.7 启用指定的 Job](#1.2.7 启用指定的 Job)
        • [1.2.8 重置指定的 Job](#1.2.8 重置指定的 Job)
        • [1.2.9 删除指定的 Job](#1.2.9 删除指定的 Job)
        • [1.2.10 获取指定 Job 最后一次构建信息](#1.2.10 获取指定 Job 最后一次构建信息)
        • [1.2.11 获取视图中的所有 Job](#1.2.11 获取视图中的所有 Job)
      • [1.3 管理 Jenkins view](#1.3 管理 Jenkins view)
        • [1.3.1 创建视图(自定义)](#1.3.1 创建视图(自定义))
        • [1.3.2 获取指定视图配置信息](#1.3.2 获取指定视图配置信息)
        • [1.3.3 获取所有视图列表](#1.3.3 获取所有视图列表)
        • [1.3.4 删除指定视图](#1.3.4 删除指定视图)
      • [1.4 管理 Jenkins 插件](#1.4 管理 Jenkins 插件)
    • 二、总结
    • FAQ

前言

Python-Jenkins 是一个用于与 Jenkins CI(持续集成)服务器进行交互的 Python 三方包。它提供了一组功能丰富的 API,使开发人员能够通过 Python 脚本与 Jenkins 进行通信和操作。

Python-Jenkins 插件的主要用途包括:

  1. 自动化构建和部署:通过 Python-Jenkins,编写脚本来触发 Jenkins Jobs 的构建和部署过程。
  2. 监控和管理 Jenkins 作业:Python-Jenkins 能够获取有关 Jenkins Jobs 的信息,如构建状态、构建日志等。
  3. 配置管理:同时 Python-Jenkins 还可以创建、修改和删除 Jenkins Jobs、视图、节点等。

简单理解就是,Python-Jenkins 工具为开发/运维等技术人员提供了一种方便的方式来与 Jenkins CI 服务器进行交互,从而实现自动化构建、部署和管理 Jenkins 作业的目的。

接下来,列举该工具一些常见的使用案例。

一、案例

1.1 管理 Jenkins Version

1、创建虚拟环境

sh 复制代码
mkvirtualenv myenv

2、安装 Python-Jenkins 包

py 复制代码
pip install python-jenkins

3、编写代码

py 复制代码
import jenkins

server = jenkins.Jenkins('http://192.168.56.142:8888', username='admin', password='zhurs@123')
user = server.get_whoami()
version = server.get_version()
print('当前登录用户为:%s \nJenkins版本为:%s' % (user['fullName'], version))

4、执行结果

1.2 管理 Jenkins Job

1.2.1 普通创建 Job

py 复制代码
server.create_job('newjob', jenkins.EMPTY_CONFIG_XML)

# 通过create_job()方法创建newjob工程(且默认配置为空的XML配置)

1.2.2 获取当前用户的所有 Job

py 复制代码
jobs = server.get_jobs()

# 通过get_jobs()方法获取当前用户所有工程(作业)

1.2.3 获取指定的 Job 配置信息

我 jenkins 原本就已经创建了一个 test 的工程,那此时我们就可以通过 get_job_config() 方法来获取这个 job 的配置信息。

py 复制代码
my_job = server.get_job_config('test')

# 通过get_job_config()方法来获取test这个job的配置信息

1.2.4 构建指定的 Job

py 复制代码
server.build_job('newjob')

# 通过build_job()方法来构建newjob这个job

我们也可以在构建时向 job 传递指定的参数:

py 复制代码
server.build_job('param-test', {'param1': 'first param value', 'param2': 'second param value'})

# 在job中我们就可以使用param1、param2这两个参数对应的值了

1.2.5 禁用指定的 Job

py 复制代码
server.disable_job('newjob')

# 通过disable_job()来禁用newjob这个job

1.2.6 复制指定的 Job

py 复制代码
server.copy_job('newjob', 'newjob_copy')

# 通过copy_job()方法,将newjob工程复制并命名为newjob_copy

1.2.7 启用指定的 Job

py 复制代码
server.enable_job('newjob_copy')

# 通过enable_job()函数来启用newjob_copy这个job

1.2.8 重置指定的 Job

py 复制代码
server.reconfig_job('newjob_copy', jenkins.RECONFIG_XML)

# 通过reconfig_job()方法将newjob_copy重置配置

1.2.9 删除指定的 Job

删除就不演示了,你也看不见效果。

py 复制代码
server.delete_job('newjob')
server.delete_job('newjob_copy')

# 通过delete_job()方法删除newjob和newjob_copy

以上片段代码整合如下:

py 复制代码
import jenkins

server = jenkins.Jenkins('http://192.168.56.142:8888', username='admin', password='zhurs@123')
user = server.get_whoami()
version = server.get_version()
print('当前登录用户为:%s \nJenkins版本为:%s' % (user['fullName'], version))

server.create_job('newjob', jenkins.EMPTY_CONFIG_XML)
jobs = server.get_jobs()
print("当前账户的所有job列表:\n", jobs)
my_job = server.get_job_config('test')
print("test工程的配置信息为:\n", my_job)
server.build_job('newjob')
server.disable_job('newjob')
server.copy_job('newjob', 'newjob_copy')
server.enable_job('newjob_copy')
server.reconfig_job('newjob_copy', jenkins.RECONFIG_XML)

先来看看效果:

  • Linux 控制台输出

  • Jenkins 控制台输出

1.2.10 获取指定 Job 最后一次构建信息

py 复制代码
last_build_number = server.get_job_info('test')['lastCompletedBuild']['number']
build_info = server.get_build_info('test', last_build_number)
print(build_info)

# 通过build_job()方法来获取test这个job最后一次的构建信息
# 其内容包括构建用户、构建ID、构建URL等

1.2.11 获取视图中的所有 Job

py 复制代码
jobs = server.get_jobs(view_name='dev')
print(jobs)

# 通过get_job()方法来获取指定的试图下的所有job信息

先看看我 jenkins 中有哪些视图,及视图下有哪些 job

可见,dev 视图下有一个名为 test 的 job

最后来验证是否正确获取到指定视图下的内容

内容正确获取并打印到标准输出

1.3 管理 Jenkins view

1.3.1 创建视图(自定义)

py 复制代码
server.create_view('devops', jenkins.EMPTY_VIEW_CONFIG_XML)

# 通过create_view()方法来创建自定义视图(且为一个空的视图配置)

1.3.2 获取指定视图配置信息

py 复制代码
view_config = server.get_view_config('devops')
print(view_config)

1.3.3 获取所有视图列表

1.3.4 删除指定视图

py 复制代码
server.delete_view('devops')

# 删除名为devops的视图

1.4 管理 Jenkins 插件

py 复制代码
plugins = server.get_plugins_info()
print(plugins)

# 通过get_plugins_info()方法来获取当前jenkins安装的所有插件

下图为部分截图

二、总结

  1. Python-Jenkins 是一个用于与 Jenkins CI(持续集成)服务器进行交互的 Python 三方工具包;
  2. 以上案例只是其中的一部分,作为一个简单的入门理解,想要了解更多内容,可以查看其官方文档或 Jenkins 的 REST API;
  3. 我认为这作为日常 API 调用时是很方便的,想要实现完整的 Pipeline,还是得学好 Pipeline 语法/Groovy 语法

FAQ

urllib3 包所需 ssl 模块 openssl 版本过低

提示需要 openssl 1.1.1+ 以上,但是当前为 1.0.2,有两种方法:

  • 升级 openssl 版本

    py 复制代码
    pip install openssl@1.1
  • 降低 urllib3 版本(我采用的是这种方法)

    py 复制代码
    pip install urllib3==1.26.6

注意:这个 openssl 不是你的宿主机的 openssl 而是你的 Python 环境中的 openssl。

相关推荐
余~~185381628009 分钟前
稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
开发语言·人工智能·python·音视频
0zxm19 分钟前
06 - Django 视图view
网络·后端·python·django
ROBOT玲玉1 小时前
Milvus 中,FieldSchema 的 dim 参数和索引参数中的 “nlist“ 的区别
python·机器学习·numpy
Kai HVZ2 小时前
python爬虫----爬取视频实战
爬虫·python·音视频
古希腊掌管学习的神2 小时前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
m0_748244832 小时前
StarRocks 排查单副本表
大数据·数据库·python
B站计算机毕业设计超人2 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
路人甲ing..2 小时前
jupyter切换内核方法配置问题总结
chrome·python·jupyter
游客5202 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
每天都要学信号3 小时前
Python(第一天)
开发语言·python