python利用jenkins模块操作jenkins

安装python-jenkins

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

pip install python-jenkins

操作jenkins

接下来就是连接和操作jenkins,写了个class,直接上代码

class Jenkins():def __init__(self, url, username, password):# jenkins服务连接URLself.url = url# jenkins登陆的用户名密码self.username = usernameself.password = password# 连接jenkinsself.server = jenkins.Jenkins(self.url, self.username, self.password)def create_job(self, job_name, credentials_id, config_xml, command, node_name):"""创建job任务:param job_name: 任务名称:param config_xml: job任务参数设置:param command: job任务中shell脚本:param node_name: 执行任务的几点名称:return:"""# 这步就是将job任务中的shell脚本那部分添加到config_xml中,在config_xml中需要提前设置好{command}才可以这样做哈config_xml = config_xml.replace("{command}", command).rstrip()config_xml = config_xml.decode('utf-8')try:self.server.create_job(job_name, config_xml)except Exception as e:err_one = "job[{}] already exists".format(job_name)if str(e) != err_one:return False, ereturn True, ""def get_job_xml(self, job_name):"""获取job xml配置信息:param job_name::return:"""return self.server.get_job_config(job_name)def get_node_config(self, node_name):"""获取节点配置信息:param node_name::return:"""return self.server.get_node_config(node_name)def create_node(self, node_name, credentials_id, sshhost, remotefs, labels=None, numExecutors=1, nodeDescription=None):"""创建节点:param node_name: 节点名称:param credentials_id: 在Jenkins中配置的凭据ID:param sshhost: 主机:param remoteFS: 远程工作目录:param labels: 标签:param numExecutors: Number of executors(Jenkins 可以在此节点上执行并发构建的最大数目):param nodeDescription: 描述:return:"""try:self.server.create_node(node_name,numExecutors=numExecutors,nodeDescription=nodeDescription,remoteFS=remotefs,labels=labels,launcher= "hudson.plugins.sshslaves.SSHLauncher",launcher_params={'stapler-class': 'hudson.slaves.SSHLauncher','host': sshhost,'port': 22,'credentialsId': credentials_id,'jnlp': {'workDirSettings': {'innerDir': 'remoting','failIfWorkDirIsCaseInsensitive': False,'failIfWorkDirExists': False,'createWorkDir': True,'disabled': False,'deleteWorkDir': False,'stickyReferenceFiles': ''}}})except Exception as e:err_one = "node[{}] already exists".format(node_name)if str(e) != err_one:return False, ereturn True, ""def get_build_info(self, job_name, last_build_number=0):"""获取job 信息:param job_name: jenkins任务名称:param last_build_number: jenkins build number:return: dict"""return self.server.get_job_info(job_name, last_build_number)def get_job_build_number(self, job_name):"""获取job number:param job_name: jenkins任务名称:return: int"""try:build_number = self.get_build_info(job_name)["lastBuild"]["number"]except:# 取不出来值是因为还没有执行过任务,所以返回默认值0build_number = 0return build_numberdef build_job(self, job_name, params):"""执行job:param params::return:"""self.server.build_job(job_name, params)hope_build_number = -1# 获取创建的任务numberwhile True:last_build_number = self.get_job_build_number(job_name)if last_build_number != hope_build_number:hope_build_number = last_build_number + 1else:breaktime.sleep(1)# 获取自动化执行结果while True:result = self.get_build_info_status(job_name, hope_build_number)if result is not None:breaktime.sleep(1)return hope_build_number, resultdef get_build_console_ouput(self, job_name, last_build_number):"""获取项目控制台日志:param job_name: jenkins任务名称:param last_build_number: jenkins build number:return: str"""return self.server.get_build_console_output(name=job_name, number=last_build_number)def get_build_info_status(self, job_name, last_build_number):"""获取任务状态:param job_name: jenkins任务名称:param last_build_number: jenkins build number:return:str 状态有4种:SUCCESS| FAILURE| ABORTED| pending"""builds = self.get_build_info(job_name, last_build_number)["builds"]for b in builds:if b["number"] == last_build_number:result = b["result"]return resultdef get_build_ouput_url(self, job_name, job_number):"""获取日志输出链接地址:param job_name: jenkins任务名称:param job_number: jenkins build number:return: str"""return "{jenkins_url}/job/{job_name}/{job_number}/console".format(jenkins_url=self.url, job_name=job_name, job_number=job_number)def get_build_report_url(self, job_name, job_number, report_name):"""获取自动化报告结果链接地址:param job_name: jenkins任务名称:param job_number: jenkins build number:param report_name: jenkins测试报告html文件名称:return: str"""return "{jenkins_url}/job/{job_name}/{job_number}/artifact/{report_name}".format(jenkins_url=self.url, job_name=job_name, job_number=job_number, report_name=report_name)

暂时写了些常用的。其实还有删除、修改等操作,可以看下底层代码中有哪些方法可以用。可玩性还是很高的。就不详细写了。

就这样,下课!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel大数据量导入导出

github源码 地址(更详细) : https://github.com/alibaba/easyexcel 文档:读Excel(文档已经迁移) B 站视频 : https://www.bilibili.com/video/BV1Ff4y1U7Qc 一、JAVA解析EXCEL工具EasyExcel Java解析、生成Excel比较…

Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端

**TCP传输:**两个端点的建立连接后会有一个传输数据的通道,这通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入。 **tcp的两个端点:**一个是客户端,一个是服务…

HCIA项目实践--RIP相关原理知识面试问题总结回答

9.4 RIP 9.4.1 补充概念 什么是邻居? 邻居指的是在网络拓扑结构中与某一节点(如路由器)直接相连的其他节点。它们之间可以直接进行通信和数据交互,能互相交换路由信息等,以实现网络中的数据转发和路径选择等功能。&am…

计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Django开发入门 – 4.创建Django app

Django开发入门 – 4.创建Django app Create A Django App Under An Existing Project By JacksonML 1. 什么是Django app? Django项目面向Web应用程序,它会由一个或多个子模块组成,这些子模块称为apps。 Django apps负责执行完整Web应用程序中涉及…

八、OSG学习笔记-

前一章节: 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码: OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

微信小程序医院挂号系统

第3章 系统设计 3.1系统体系结构 系统的体系结构非常重要,往往决定了系统的质量和生命周期。针对不同的系统可以采用不同的系统体系结构。本系统为微信小程序医院挂号系统,属于开放式的平台,所以在管理端体系结构中采用B/s。B/s结构抛弃了固…

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…

【嵌入式Linux应用开发基础】open函数与close函数

目录 一、open函数 1.1. 函数原型 1.2 参数说明 1.3 返回值 1.4. 示例代码 二、close函数 2.1. 函数原型 2.2. 示例代码 三、关键注意事项 3.1. 资源管理与泄漏防范 3.2. 错误处理的严谨性 3.3. 标志&#xff08;flags&#xff09;与权限&#xff08;mode&#xff…

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32 1. 获取代码&#xff1a;2. 加入你的项目2.1 以 STM32 为例:2.2 以 ESP-IDF 为例: 3. 对接 API3.1 以 STM32 为例&#xff1a; 4. 更多函数说明5. 写入 EEPROM 示例 MT6835 Framework 纯C语言实现&#xff0c;跨平台&…

ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用

作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…

在fedora41中安装钉钉dingtalk_7.6.25.4122001_amd64

在Fedora-Workstation-Live-x86_64-41-1.4中安装钉钉dingtalk_7.6.25.4122001_amd64.deb 到官网下载钉钉Linux客户端com.alibabainc.dingtalk_7.6.25.4122001_amd64.deb https://page.dingtalk.com/wow/z/dingtalk/simple/ddhomedownload#/ 一、直接使用dpkg命令安装deb包报错…

设置mysql的主从复制模式

mysql设置主从复制模式似乎很容易&#xff0c;关键在于1&#xff09;主库启用二进制日志&#xff0c;2&#xff09;从库将主库设为主库。另外&#xff0c;主从复制&#xff0c;复制些什么&#xff1f;从我现在获得的还很少的经验来看&#xff0c;复制的内容有表&#xff0c;用户…

【算法学习】拓扑排序(Topological Sorting)

目录 定义 例子 拓扑排序的实现 核心思想 实现方法 1&#xff0c;Kahn算法&#xff08;基于贪心策略&#xff09; 步骤&#xff1a; 用二维数组存储图的例子 用哈希表存储图的例子 2&#xff0c;基于DFS的后序遍历法 总结 拓扑排序的应用场景 1&#xff0c;任务调度 …

AGI时代的认知重塑:人类文明的范式转移与思维革命

文章目录 引言:站在文明转型的临界点一、认知危机:当机器开始理解世界1.1 AGI的本质突破:从模式识别到世界建模1.2 人类认知的脆弱性暴露二、认知革命:重构思维的四个维度2.1 元认知升级:从直觉思维到二阶观察2.2 混合智能:人机认知回路的构建2.3 认知安全:防御机器思维…

零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构

课程里的版本好像是1.9&#xff0c;目前使用版本为3.8.3 开始~ 目录 状态同步帧同步帧同步客户端帧同步服务端ECS框架概念ECS的解释ECS的特点EntityComponentSystemWorld ECS实现逻辑帧&渲染帧 ECS框架使用帧同步&ECS 状态同步 一般游戏的同步策略有两种&#xff1a;…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…

算法基础:贪心|双指针|二分|倍增

贪心 算法思想&#xff1a; 把整个问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直到所有步骤结束&#xff1b;每个步骤都不会影响后续步骤。 核心&#xff1a;采取局部最优&#xff0c;最终结果就全局最优。 双指针 反向扫描 同向扫描 二…

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令&#xff0c;如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符&#xff08;CMD&#xff0…

【设计模式】【行为型模式】观察者模式(Observer)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f4eb; 欢迎V&#xff1a; flzjcsg2&#xff0c;我们共同讨论Java深渊的奥秘 &#x1f…