当前位置: 首页 > news >正文

使用Python操作Jenkins

        大家好,Python作为一种简洁、灵活且功能丰富的编程语言,可以与各种API轻松集成,Jenkins的API也不例外。借助于Python中的python-jenkins模块,我们可以轻松地编写脚本来连接到Jenkins服务器,并执行各种操作,如创建、删除、构建Jobs等。这种自动化的方式不仅提高了效率,还使得CI/CD流程更加灵活和可控。

一、安装python-jenkins

可以使用pip命令来安装python-jenkins模块:

pip install python-jenkins

二、连接到Jenkins

使用python-jenkins模块连接到Jenkins服务器:

import jenkins# Jenkins服务器的URL
jenkins_url = 'http://your-jenkins-url'# Jenkins的用户名和密码
username = 'your-username'
password = 'your-password'# 连接到Jenkins服务器
server = jenkins.Jenkins(jenkins_url, username, password)

三、执行操作

        连接到Jenkins后,可以执行各种操作,如获取job信息、构建job、获取构建信息等。下面给大家介绍一下常见的操作。

1、获取所有 Jobs

可以使用 get_jobs() 方法获取 Jenkins 服务器上的所有 Jobs。

jobs = server.get_jobs()
for job in jobs:print(job['name'])

2、获取 Job 信息

可以使用 get_job_info(job_name) 方法获取特定 Job 的详细信息。

job_name = 'your-job-name'
job_info = server.get_job_info(job_name)
print(job_info)

3、创建 Job

job_name = 'new-job'
config_xml = '''
<project><description>A new job created via Python</description><builders><hudson.tasks.Shell><command>echo "Hello from Python-Jenkins"</command></hudson.tasks.Shell></builders>
</project>
'''
server.create_job(job_name, config_xml)

4、删除 Job

可以使用 delete_job(job_name) 方法删除特定的 Job。

job_name = 'job-to-delete'
server.delete_job(job_name)

5、构建 Job

可以使用 build_job(job_name) 方法触发构建特定的 Job。

job_name = 'job-to-build'
server.build_job(job_name)

6、获取构建信息

可以使用 get_build_info(job_name, build_number) 方法获取特定 Job 的构建信息。

job_name = 'your-job-name'
build_number = 1  # 构建号
build_info = server.get_build_info(job_name, build_number)
print(build_info)

7、获取最后一次构建的结果

可以使用 get_job_info(job_name) 方法获取 Job 的详细信息,其中包括最后一次构建的结果。

job_name = 'your-job-name'
job_info = server.get_job_info(job_name)
last_build_result = job_info['lastBuild']['result']
print("最后一次构建结果:", last_build_result)

8、获取构建日志

可以使用 get_build_console_output(job_name, build_number) 方法获取特定构建的控制台输出日志。

job_name = 'your-job-name'
build_number = 1  # 构建号
console_output = server.get_build_console_output(job_name, build_number)
print(console_output)

9、触发参数化构建

如果 Jenkins Job 是参数化的,可以使用 build_job() 方法的 parameters 参数来触发参数化构建。

job_name = 'your-job-name'
parameters = {'param1': 'value1', 'param2': 'value2'}
server.build_job(job_name, parameters=parameters)

10、获取视图信息

可以使用 get_views() 方法获取 Jenkins 上的所有视图信息。

views = server.get_views()
for view in views:print(view['name'])

11、获取节点信息

可以使用 get_nodes() 方法获取 Jenkins 上所有节点的信息。

nodes = server.get_nodes()
for node in nodes:print(node['name'])

12、获取构建的测试结果

可以使用 get_tests(job_name, build_number) 方法获取特定构建的测试结果。

job_name = 'your-job-name'
build_number = 1  # 构建号
test_results = server.get_tests(job_name, build_number)
print(test_results)

13、获取插件信息

可以使用 get_plugins() 方法获取 Jenkins 上已安装的所有插件的信息。

plugins = server.get_plugins()
for plugin in plugins:print(plugin['shortName'], plugin['version'])

14、设置节点离线/在线状态

可以使用 disable_node(node_name)enable_node(node_name) 方法将节点设置为离线或在线状态。

node_name = 'node-to-disable'
server.disable_node(node_name)node_name = 'node-to-enable'
server.enable_node(node_name)

15、获取构建的变更集信息

可以使用 get_changeset(job_name, build_number) 方法获取特定构建的变更集信息。

job_name = 'your-job-name'
build_number = 1  # 构建号
changeset = server.get_changeset(job_name, build_number)
print(changeset)

16、获取 Jenkins 系统信息

可以使用 get_info() 方法获取 Jenkins 系统信息。

info = server.get_info()
print(info)

17、执行 Groovy 脚本

可以使用 run_script(script) 方法执行 Groovy 脚本。

script = "println('Hello from Groovy')"
result = server.run_script(script)
print(result)

18、获取当前 Jenkins 用户信息

可以使用 get_whoami() 方法获取当前 Jenkins 用户的信息。

user_info = server.get_whoami()
print(user_info)

19、获取构建的稳定性

可以使用 get_build_stability(job_name, build_number) 方法获取特定构建的稳定性信息。

job_name = 'your-job-name'
build_number = 1  # 构建号
stability = server.get_build_stability(job_name, build_number)
print(stability)

20、禁用 Job

要禁用一个 Job,可以使用 disable_job(job_name) 方法。

job_name = 'your-job-name'
server.disable_job(job_name)

21、重新启用 Job

要重新启用一个被禁用的 Job,可以使用 enable_job(job_name) 方法。

job_name = 'your-job-name'
server.enable_job(job_name)

22、创建视图

要创建视图,可以使用 create_view(view_name, view_config_xml) 方法。

view_name = 'new-view'
view_config_xml = '''
<hudson.model.ListView><name>My New View</name><filterExecutors>false</filterExecutors><filterQueue>false</filterQueue><properties class="hudson.model.View$PropertyList"/><jobNames><comparator class="hudson.util.CaseInsensitiveComparator"/><string>your-job-name</string></jobNames><jobFilters/><columns><hudson.views.StatusColumn/><hudson.views.WeatherColumn/><hudson.views.JobColumn/><hudson.views.LastSuccessColumn/><hudson.views.LastFailureColumn/><hudson.views.LastDurationColumn/><hudson.views.BuildButtonColumn/></columns><recurse>false</recurse>
</hudson.model.ListView>
'''
server.create_view(view_name, view_config_xml)

23、删除视图

要删除视图,可以使用 delete_view(view_name) 方法。

view_name = 'view-to-delete'
server.delete_view(view_name)

24、编辑视图

要编辑视图,可以先获取视图的配置信息,然后修改需要的部分,最后使用 server.reconfig_view(view_name, view_config_xml) 方法来重新配置视图。

view_name = 'your-view-name'
view_config_xml = '''
<hudson.model.ListView><name>Modified View</name><filterExecutors>false</filterExecutors><filterQueue>false</filterQueue><properties class="hudson.model.View$PropertyList"/><jobNames><comparator class="hudson.util.CaseInsensitiveComparator"/><string>your-job-name</string></jobNames><jobFilters/><columns><hudson.views.StatusColumn/><hudson.views.WeatherColumn/><hudson.views.JobColumn/><hudson.views.LastSuccessColumn/><hudson.views.LastFailureColumn/><hudson.views.LastDurationColumn/><hudson.views.BuildButtonColumn/></columns><recurse>false</recurse>
</hudson.model.ListView>
'''
server.reconfig_view(view_name, view_config_xml)

25、编辑 Job

要编辑 Job,可以先获取 Job 的配置信息,然后修改需要的部分,最后使用 server.reconfig_job(job_name, job_config_xml) 方法来重新配置 Job。

job_name = 'your-job-name'
job_config_xml = '''
<project><description>Modified Job Description</description><builders><hudson.tasks.Shell><command>echo "Modified Build Step"</command></hudson.tasks.Shell></builders>
</project>
'''
server.reconfig_job(job_name, job_config_xml)

四、示例

        下面是一个完整的示例,展示了如何使用 python-jenkins 模块连接到 Jenkins 服务器,并进行一些基本操作,包括创建、构建、编辑和删除 Job:

import jenkins# Jenkins 服务器的 URL
jenkins_url = 'http://your-jenkins-url'# Jenkins 的用户名和密码
username = 'your-username'
password = 'your-password'# 使用 Jenkins 类来连接到 Jenkins 服务器
server = jenkins.Jenkins(jenkins_url, username, password)# 1. 创建一个新的 Job
new_job_name = 'new-job'
new_job_config_xml = '''
<project><description>A new job created via Python</description><builders><hudson.tasks.Shell><command>echo "Hello from Python-Jenkins"</command></hudson.tasks.Shell></builders>
</project>
'''
server.create_job(new_job_name, new_job_config_xml)# 2. 获取所有 Jobs
print("All Jobs:")
jobs = server.get_jobs()
for job in jobs:print(job['name'])# 3. 构建 Job
job_to_build = 'new-job'
server.build_job(job_to_build)# 4. 编辑 Job
job_to_edit = 'new-job'
edited_job_config_xml = '''
<project><description>Modified job description</description><builders><hudson.tasks.Shell><command>echo "Modified build step"</command></hudson.tasks.Shell></builders>
</project>
'''
server.reconfig_job(job_to_edit, edited_job_config_xml)# 5. 删除 Job
job_to_delete = 'new-job'
server.delete_job(job_to_delete)print("Job operations completed.")

相关文章:

使用Python操作Jenkins

大家好&#xff0c;Python作为一种简洁、灵活且功能丰富的编程语言&#xff0c;可以与各种API轻松集成&#xff0c;Jenkins的API也不例外。借助于Python中的python-jenkins模块&#xff0c;我们可以轻松地编写脚本来连接到Jenkins服务器&#xff0c;并执行各种操作&#xff0c;…...

网络协议测试仪设计方案:474-便携式手提万兆网络协议测试仪

便携式手提万兆网络协议测试仪 一、平台简介 便携式手提万兆网络协议测试仪&#xff0c;以FPGA万兆卡和X86主板为基础&#xff0c;构建便携式的手提设备。 FPGA万兆卡是以Kintex-7XC7K325T PCIeX4的双路万兆光纤网络卡&#xff0c;支持万兆网络数据的收发和网络协议…...

使用numpy手写一个神经网络

本文主要包含以下内容&#xff1a; 推导神经网络的误差反向传播过程使用numpy编写简单的神经网络&#xff0c;并使用iris数据集和california_housing数据集分别进行分类和回归任务&#xff0c;最终将训练过程可视化。 1. BP算法的推导过程 1.1 导入 前向传播和反向传播的总体…...

使用Spring AOP实现接口参数变更前后对比和日志记录

推荐一个程序员的常用工具网站,效率加倍,嘎嘎好用:程序员常用工具云服务器限时免费领:轻量服务器2核4G腾讯云:2核2G4M云服务器新老同享99元/年,续费同价阿里云:2核2G3M的ECS服务器只需99元/年,续费同价记录接口调用前后的参数变化是一个常见的需求,这不仅有助于调试和…...

免费无限换脸,火了,图片/视频/直播都行!

最强换脸AI工具Facefusion软件在近期更新到了2.6.0版本&#xff0c;带来了一系列的更新和改进&#xff0c;今天为大家分享一下最新的整合包。 Facefusion2.6.0版本介绍 FaceFusion不仅仅是一款换脸软件&#xff0c;它更是一个多功能的数字人和实时直播助手&#xff0c;真正开启…...

无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用

​在当下这个全民皆为媒体的时代大潮中&#xff0c;视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下&#xff0c;若要在这片广阔海洋中扬帆远航&#xff0c;优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作&#xff0c;除了需要创…...

操作系统实验--终极逃课方法

找到图片里的这个路径下的文件 &#xff0c;结合当前题目名称&#xff0c;把文件内容全部删除&#xff0c;改为print print的内容为下图左下角的预期输出的内容...

C语言实现正弦信号扫频

C语言实现正弦信号扫频 包含必要的头文件:首先,你需要包含 <stdio.h> 和 <math.h> 头文件,分别用于输入输出和数学函数的使用。 定义扫频参数:定义正弦扫频的参数,例如起始频率、结束频率、扫频时间等。 生成正弦波信号:使用正弦函数生成扫频信号,可以根…...

实用篇| huggingface网络不通

之前文章《Transformer原理》中介绍过,Transformers 是由 Hugging Face 开发的一个包&#xff0c;支持加载目前绝大部分的预训练模型。随着 BERT、GPT 等大规模语言模型的兴起&#xff0c;越来越多的公司和研究者采用 Transformers 库来构建应用。 Hugging Face是一家美国公司…...

NLP与训练模型-GPT-3:探索人工智能语言生成的新纪元

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是备受关注的研究方向之一。随着深度学习技术的发展&#xff0c;尤其是Transformer模型的出现&#xff0c;NLP领域取得了巨大的进步。其中&#xff0c;由OpenAI推出的GPT-3模型更是引起了广泛的关注和热…...

iOS内购欺诈漏洞

iOS内购欺诈漏洞 1.iOS内购欺诈漏洞概述2.伪造的凭证3.漏洞修复方案 1.iOS内购欺诈漏洞概述 黑产别的App上低价充值&#xff08;比如1元&#xff09;换取苹果真实凭证&#xff0c;再在目标App上下单高价&#xff08;648元&#xff09;商品&#xff0c;传入该凭证&#xff0c;如…...

【网络服务】正向代理和反向代理到底是什么意思

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 前言 在学习和…...

【算法】记忆化搜索

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、不同路径二、最长递增子序列三、猜数字大小 ||四、矩阵中的最长递增路径总结 引言 记忆化搜索&…...

博客系统多模块开发

创建工程 创建父工程 删除src目录&#xff0c;在pom.xml添加依赖&#xff1a; <!--统一版本 字符编码--><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.b…...

pdf阅读器哪个好用?五款PDF阅读器大比拼

pdf阅读器哪个好用&#xff1f;在数字化时代&#xff0c;PDF文档因其跨平台、跨设备的便捷性&#xff0c;已成为工作、学习和生活中不可或缺的一部分。而一款优秀的PDF阅读器&#xff0c;则能极大地提升我们处理PDF文档的效率与体验。今天&#xff0c;就让我们一起探索五款备受…...

C#实现Queue的加锁和解锁

在C#中&#xff0c;可以使用lock语句来对队列进行加锁和解锁&#xff0c;以确保在多线程环境下的线程安全。以下是一个简单的示例&#xff1a; using System; using System.Collections.Generic; using System.Threading;public class ThreadSafeQueue<T> {private read…...

北京邮电大学人工智能考数据结构,均分370!北京邮电大学计算机考研考情分析!

北京邮电大学&#xff08;Beijing University of Posts and Telecommunications&#xff09;&#xff0c;简称北邮&#xff0c;是中华人民共和国教育部直属、工业和信息化部共建的全国重点大学&#xff0c;位列国家“211工程”、“985工程优势学科创新平台”、“世界一流学科建…...

1. lambda初体验

首先声明一个函数式接口&#xff0c;就只接口内只有一个抽象方法 //函数式接口 public interface Factory {Object getObject();}接口实现类 public class SubClass implements Factory {Overridepublic Object getObject() {return new User();}}User类 public class User …...

C#之显示转换

在C#中显示转换分为三种本别是: 括号强转&#xff0c;parse法&#xff0c;convert法。下面就为大家介绍一下吧&#xff01;&#xff01;&#xff01; 括号强转 作用: 一般情况下 将高精度的类型转换为低精度 语法: 变量类型 变量名 (转换的变量类型名称) 变量&#xff1b; …...

汇编原理(三)编程

源程序&#xff1a; 汇编指令&#xff1a;有对应的机器码与其对应 伪指令&#xff1a;无对应的机器码&#xff0c;是由编译器来执行的指令&#xff0c;编译器根据伪指令来进行相关的编译工作。 ex1:XXX segment、XXX ends这两个是一对成对使用的伪指令&#xff0c;且必须会被用…...

伪装 Android 应用运营商计费欺诈的攻击机理与防御研究

摘要 2026 年 5 月&#xff0c;Dark Reading 与 Zimperium 披露一起针对马来西亚、泰国、罗马尼亚、克罗地亚等国 Android 用户的大规模运营商计费欺诈活动。攻击者以近 250 个伪装成热门应用的恶意程序为载体&#xff0c;通过读取 SIM 卡信息定向激活攻击流程&#xff0c;综合…...

防爆控制柜制造:从危险区域适配到电气安全的完整解析

一、什么是防爆控制柜制造&#xff1f;防爆控制柜制造&#xff0c;是指根据化工厂、石油化工、制药车间、喷涂车间、粉尘车间、油漆房、燃气站、危化品仓库、煤化工、粮食加工、木粉加工、新能源材料、电子化学品等存在爆炸性气体、蒸气或粉尘环境的场所需求&#xff0c;对防爆…...

GPT5.5每次推理只激活部分参数MoE路由策略完整拆解

做多模型架构对比测试时用了cc.877ai.cn这个AI模型聚合平台&#xff0c;一站接入多个模型方便对比不同架构策略在实际任务中的表现差异。GPT-5.5是OpenAI首个从零完整重训的基础模型。大多数人关注"变强了多少"但更值得关注的是"怎么变强的"。MoE路由策略是…...

2026年企业AI落地新趋势!RAG知识库实战指南:环境搭建到生产部署全解析

本文介绍了RAG&#xff08;检索增强生成&#xff09;技术在企业知识库中的应用&#xff0c;通过从环境搭建到生产部署的完整实战指南&#xff0c;阐述如何利用RAG提升大语言模型回答的准确性、可追溯性和时效性。文章涵盖了基础环境配置、技术选型、数据准备、知识库构建、RAG系…...

微信虚拟支付接入(道具支付)

1.描述本文档为最近因微信虚拟支付之前使用的是普通微信支付&#xff08;旧模式的支付&#xff1a;wx.requestPayment&#xff09;此类支付其实只适用于实物商品&#xff0c;ios端不支持&#xff08;会被封禁&#xff09;&#xff1b;因其费率更低&#xff08;大概在0.6%&#…...

印地语语音合成落地难?ElevenLabs官方未披露的4大限制、3种绕过技巧,及2个替代模型性能对比数据

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;印地语语音合成落地难&#xff1f;ElevenLabs官方未披露的4大限制、3种绕过技巧&#xff0c;及2个替代模型性能对比数据 ElevenLabs对印地语支持的真实现状 ElevenLabs虽在API文档中标注“支持印地语&#x…...

一文讲透|盘点2026年标杆级的AI论文网站

一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的AI论文网站神器&#xff0c;覆盖全流程生成、文献处理、降重润色、格式排版四大核心场景&#xff0c;帮你高效搞定毕业论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天…...

26-cv-3948 NASCAR 纳斯卡赛车北美赛车巨头NASCAR商标维权!年认证超1500场赛事,全球布局品牌产品与授权营销。

案号&#xff1a;26-cv-3948原告品牌&#xff1a;NASCAR 纳斯卡赛车品牌方&#xff1a;National Association for Stock Car Auto Racing, LLC起诉地&#xff1a;美国纽约州南区代理律所&#xff1a;Whitewood Law PLLC起诉时间&#xff1a;2026年05月12日起诉类型&#xff1a;…...

3D格式转换神器:如何用stltostp轻松实现STL到STEP的无缝转换

3D格式转换神器&#xff1a;如何用stltostp轻松实现STL到STEP的无缝转换 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 你是否曾经遇到这样的困境&#xff1f;精心设计的3D打印模型在STL格式下…...

如何在智能电视上打造完美的家庭影院:Jellyfin Android TV客户端完整指南

如何在智能电视上打造完美的家庭影院&#xff1a;Jellyfin Android TV客户端完整指南 【免费下载链接】jellyfin-androidtv Android TV Client for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-androidtv 想要将智能电视、NVIDIA Shield或亚马逊Fir…...