Python-Jenkins 在 Jenkins 中的应用

2023-09-15 17:51:36

original

Author:rab

Python 版本:3.9

Jenkins 版本:2.409

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



前言

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、创建虚拟环境

mkvirtualenv myenv

2、安装 Python-Jenkins 包

pip install python-jenkins

image-20230915141833839

3、编写代码

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、执行结果

image-20230915145418959

1.2 管理 Jenkins Job

1.2.1 普通创建 Job
server.create_job('newjob', jenkins.EMPTY_CONFIG_XML)

# 通过create_job()方法创建newjob工程(且默认配置为空的XML配置)
1.2.2 获取当前用户的所有 Job
jobs = server.get_jobs()

# 通过get_jobs()方法获取当前用户所有工程(作业)
1.2.3 获取指定的 Job 配置信息

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

my_job = server.get_job_config('test')

# 通过get_job_config()方法来获取test这个job的配置信息
1.2.4 构建指定的 Job
server.build_job('newjob')

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

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

server.build_job('param-test', {'param1': 'first param value', 'param2': 'second param value'})

# 在job中我们就可以使用param1、param2这两个参数对应的值了
1.2.5 禁用指定的 Job
server.disable_job('newjob')

# 通过disable_job()来禁用newjob这个job
1.2.6 复制指定的 Job
server.copy_job('newjob', 'newjob_copy')

# 通过copy_job()方法,将newjob工程复制并命名为newjob_copy
1.2.7 启用指定的 Job
server.enable_job('newjob_copy')

# 通过enable_job()函数来启用newjob_copy这个job
1.2.8 重置指定的 Job
server.reconfig_job('newjob_copy', jenkins.RECONFIG_XML)

# 通过reconfig_job()方法将newjob_copy重置配置
1.2.9 删除指定的 Job

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

server.delete_job('newjob')
server.delete_job('newjob_copy')

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

以上片段代码整合如下:

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 控制台输出

    image-20230915154822525

  • Jenkins 控制台输出

    image-20230915154931687

1.2.10 获取指定 Job 最后一次构建信息
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等

image-20230915160258112

1.2.11 获取视图中的所有 Job
jobs = server.get_jobs(view_name='dev')
print(jobs)

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

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

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

image-20230915161717213

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

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

image-20230915161436645

1.3 管理 Jenkins view

1.3.1 创建视图(自定义)
server.create_view('devops', jenkins.EMPTY_VIEW_CONFIG_XML)

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

image-20230915162724523

1.3.2 获取指定视图配置信息
view_config = server.get_view_config('devops')
print(view_config)

image-20230915162829315

1.3.3 获取所有视图列表

image-20230915163115593

1.3.4 删除指定视图
server.delete_view('devops')

# 删除名为devops的视图

image-20230915163428283

1.4 管理 Jenkins 插件

plugins = server.get_plugins_info()
print(plugins)

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

下图为部分截图

image-20230915163926339

二、总结

  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 版本

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

    pip install urllib3==1.26.6
    

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

更多推荐

Linux文件编程(open read write close函数)

文章目录前言一、open函数二、read函数三、write函数四、openreadwrite函数本质五、close函数总结前言本篇文章我们来讲解Linux中的文件编程,这篇文章会先介绍openreadwrite函数。一、open函数open函数是一个在POSIX标准中定义的函数,用于打开文件或者创建新文件。它是文件操作

Java入门级简单定时任务TimerTask

如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK入门级的定期器Timer来执行重复任务。一、原理JDK中,定时器任务的执行需要两个基本的类:java.util.Timer;java.util.TimerTask;要运行一个定时任务,最基本的步骤如下:1、建立一个要执行的任务Tim

《软件方法》第1章2023版连载(03)建模工作流

DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集1.2建模工作流1.2.1建模工作流ABCD如何能做好需求和设计,达到“低成本制造好卖的系统”的目标?并非喊喊口号就可以,需要静下心来学习和实践一些必要的建模技能。软件开发是增量、迭代进行的,每一个迭代周期都需要依次思考这么几个事情:A

四川玖璨电子商务有限公司培训可靠吗?

四川玖璨电子商务有限公司是一家在抖音平台上进行培训的电商公司。如今,随着抖音带货的火热,越来越多的人加入到这个行业中。然而,对于消费者来说,选择一个可靠的抖音培训公司并不容易。在这个领域中,四川玖璨电子商务有限公司是一个备受瞩目的公司。公司致力于为消费者提供高品质的商品和良好的服务。他们在抖音上拥有大量的粉丝,并且他们

【数据结构】图的应用:最小生成树;最短路径;有向无环图描述表达式;拓扑排序;逆拓扑排序;关键路径

目录1、最小生成树1.1概念1.2普利姆算法(Prim)1.3克鲁斯卡尔算法(Kruskal)2、最短路径2.1迪杰斯特拉算法(Dijkstra)2.2弗洛伊德算法(Floyd)2.3BFS算法,Dijkstra算法,Floyd算法的对比3、有向无环图描述表达式3.1有向无环图定义及特点3.2描述表达式4、拓扑排序4.

【Opencv入门到项目实战】(四):图像梯度计算|Sobel算子|Scharr算子|Laplacian算子

文章目录0.引言1.Sobel算子2.Scharr算子3.Laplacian算子0.引言在图像处理中,梯度是指图像中像素灰度变化的速率或幅度,我们先来看下面这张图假设我们想要计算出A点的梯度,我们可以发现A点位于边缘点,A点左边为黑色,右边为白色,而计算图像的梯度可以提取出图像中的边缘信息,我们常用的方法是使用Sobe

ESP8266 WiFi物联网智能插座—硬件功能

目录1、控制器板2、采集器板2.1、电源设计2.2、控制器设计2.3、电量采集电路设计2.4、按键和LED指示灯设计ESP8266WiFi物联网智能插座的硬件功能主要包括两部分:控制器板和采集器板。焊接成品效果如下图所示:1、控制器板控制器板是ESP8266最小系统,PCB设计效果如下图所示:控制器选用ESP-12S作

阻止用邮件不停注册wordpress账户的方法

您可以使用多种不同的策略来阻止垃圾邮件注册。以下是一些策略供您参考:第1个最好用1.完全禁用WordPress注册:如果您不需要在您的WordPress网站上公开注册,最好完全禁用注册,而不是试图打击垃圾邮件注册。要完全禁用WordPress上的用户注册,请转到设置→常规并确保未选中任何人都可以注册框1。2将验证码添加

设计模式:外观模式

目录组件代码实例源码中应用优缺点总结外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,使得客户端能够更简单地使用子系统的功能。外观模式的核心思想是将复杂的子系统封装在一个外观类中,客户端只需要与外观类进行交互,而不需要直接与子系统的各个组件进行交互。外观类充

力扣2596

题目来源示例1:输入:grid=[[0,11,16,5,20],[17,4,19,10,15],[12,1,8,21,6],[3,18,23,14,9],[24,13,2,7,22]]输出:true解释:grid如上图所示,可以证明这是一个有效的巡视方案。示例2:输入:grid=[[0,3,6],[5,8,1],[2,

计算机网络 第四章:网络层

一.网络层概述1.1分组转发和路由选择网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。如图所示:这些异构型网络如果只是需要各自内部通信,那它们只需要实现各自的物理层和数据链路层即可,但是,如果需要将这些异构型网络互连起来,形成一个更大的互联网,

热文推荐