Python-Jenkins 在 Jenkins 中的应用

news2024/11/15 9:09:21

original

Author:rab

Python 版本:3.9

Jenkins 版本:2.409

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


目录

    • 前言
    • 一、案例
      • 1.1 管理 Jenkins Version
      • 1.2 管理 Jenkins Job
        • 1.2.1 普通创建 Job
        • 1.2.2 获取当前用户的所有 Job
        • 1.2.3 获取指定的 Job 配置信息
        • 1.2.4 构建指定的 Job
        • 1.2.5 禁用指定的 Job
        • 1.2.6 复制指定的 Job
        • 1.2.7 启用指定的 Job
        • 1.2.8 重置指定的 Job
        • 1.2.9 删除指定的 Job
        • 1.2.10 获取指定 Job 最后一次构建信息
        • 1.2.11 获取视图中的所有 Job
      • 1.3 管理 Jenkins view
        • 1.3.1 创建视图(自定义)
        • 1.3.2 获取指定视图配置信息
        • 1.3.3 获取所有视图列表
        • 1.3.4 删除指定视图
      • 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、创建虚拟环境

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。

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

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

相关文章

C【程序环境和预处理】

1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段 sum.c int g_val 2016; void print(const char *str) {printf("%s\n", str); } test.c #include <stdio.h> int main() {extern void print(char *str);extern int…

气传导耳机品牌排行榜前十名,好用气传导耳机推荐

​随着人们对听力保护的重视&#xff0c;气传导耳机逐渐成为耳机市场的新宠。气传导耳机采用不入耳设计&#xff0c;让您你享受音乐的同时&#xff0c;也能保护你的听力&#xff0c;听感更自然真实通透。下面我将为大家推荐几款值得购买的气传导耳机&#xff0c;让你找到最适合…

网工内推 | 网络安全工程师,上市公司,13薪,食宿有补贴

01 苏州奖多多科技有限公司 招聘岗位&#xff1a;网络安全工程师&#xff08;安服渗透&#xff09; 职责描述&#xff1a; 1、负责客户网络安全攻击入侵事件溯源分析、处置等工作&#xff1b; 2、根据攻击告警/入侵事件&#xff0c;进行取证调查&#xff0c;攻击溯源反制&…

FPGA----VCU128的DDR4无法使用问题(全网唯一)

1、在Vivado 2019.1版本中使用DDR4的IP核会遇到如下图所示的错误&#xff0c;即便过了implementation生成了bit&#xff0c;DDR4也无法正常启动。 2、解决办法&#xff0c;上xilinx社区搜一下就知道了 AMD Customer Communityhttps://support.xilinx.com/s/article/69035?lan…

如何使用Semaphore和CompletableFuture搭配实现控制线程并发数量并等待所有线程执行完成之后在执行其它操作

代码示例&#xff1a; public static void main(String[] args) throws InterruptedException {ExecutorService executor Executors.newFixedThreadPool(4);Semaphore semaphore new Semaphore(2);try {CompletableFuture<String> futureA CompletableFuture.supplyA…

SpringMvc决战-【SpringMVC之自定义注解】

目录 一、前言 1.1.什么是注解 1.2.注解的用处 1.3.注解的原理 二.注解父类 1.注解包括那些 2.JDK基本注解 3. JDK元注解 4.自定义注解 5.如何使用自定义注解&#xff08;包括&#xff1a;注解标记【没有任何东西】&#xff0c;元数据注解&#xff09;&#xff1f; 三…

opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4

博客【opencv dnn模块 示例(3) 目标检测 object_detection (2) YOLO object detection】 测试了yolov3 及之前系列的模型&#xff0c;有在博客【opencv dnn模块 示例(15) opencv4.2版本dnn支持cuda加速&#xff08;vs2015异常解决&#xff09;】 说明了如何使用dnn模块进行cuda…

深入JVM:探索Java虚拟机

文章目录 1. JVM简介1.1 定义与核心作用1.2 JVM的跨平台特性 2. JVM内部结构深度探索2.1 类加载机制2.1.1 双亲委派模型2.1.2 OSGI框架2.1.3 类加载器分类 2.2 JVM运行时数据区2.2.1 程序计数器2.2.2 本地方法栈2.2.3 Java虚拟机栈 2.2.4 堆2.2.5 元数据区 2.3 JVM内存区域的性…

企业架构LNMP学习笔记48

数据结构类型操作&#xff1a; 数据结构&#xff1a;存储数据的方式 数据类型 算法&#xff1a;取数据的方式&#xff0c;代码就把数据进行组合&#xff0c;计算、存储、取出。 排序算法&#xff1a;冒泡排序、堆排序 二分。 key&#xff1a; key的命名规则不同于一般语言…

DataX 概述、部署、数据同步运用示例

文章目录 什么是 DataX&#xff1f;DataX 设计框架DataX 核心架构DataX 部署DataX 数据同步&#xff08;MySQL —> HDFS&#xff09; 什么是 DataX&#xff1f; DataX 是阿里巴巴集团开源的、通用的数据抽取工具&#xff0c;广泛使用的离线数据同步工具/平台。它设计用于支…

数据结构——查找(二叉排序树)

文章目录 前言一、二叉排序树构造二叉排序树步骤构造二叉排序树步骤图二叉排序树的查找二叉排序树查找递归算法二叉排序树查找非递归算法 二叉排序树的插入二叉排序树插入结点——递归算法二叉排序树插入结点——非递归算法 二叉排序树的删除 总结 前言 二叉排序树查找定义 二…

Qt的ui文件不能简单复制

在使用vsQt开发时&#xff0c;直接复制另外一个widget类的ui文件&#xff0c;简单改名成当前类对应的ui文件&#xff0c;会导致编译出错。尽可能使用添加的Qt class自带的ui文件&#xff0c;因为ui文件的配置文件中有许多与当前类相关的字符串&#xff0c;简单复制容易报错。

一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧

说在前面 一年一度的中秋节马上又要到了&#xff0c;给你的浏览器也来点氛围感吧 &#x1f315;&#x1f315;&#x1f315; 插件设计 效果 首先我们应该要先确定一下我们想要实现的效果是怎样的&#xff0c;如上图&#xff0c;我们希望在页面上鼠标点击的时候会在点击区域随…

【送书活动】用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》

文章目录 每日一句正能量前言本书概况赠书活动目录 每日一句正能量 成功与失败&#xff0c;幸福与不幸&#xff0c;在各自心里的定义都不会相同。 前言 过去&#xff0c;安全从未如此复杂&#xff1b; 现在&#xff0c;安全从未如此重要&#xff1b; 未来&#xff0c;安全更需如…

Kasisto AI:金融对话人工智能

【产品介绍】​ 名称 Kasisto 成立时间​ Kasisto创立于2013年​。 具体描述 Kasisto 数字体验平台 KAI 为全渠道虚拟助理和聊天机器人提供支持&#xff0c;他们在移动应用程序、 网站、消息传递平台和支持语音的设备上精通银行业…

交换瓶子问题(暴力求解 + 图论解法)

交换瓶子问题 文章目录 交换瓶子问题前言题目描述暴力解法【能过】图论解法知识预备【交换环】 代码暴力做法和图论做法的对比总结 前言 知道题目用暴力算法是可以过的&#xff0c;注意数据范围是1~10000&#xff0c;卡在一个微妙的地方&#xff0c;不免让人想用暴力算法&…

PyTorch深度学习(一)【线性模型、梯度下降、随机梯度下降】

这个系列是实战&#xff08;刘二大人讲的pytorch&#xff09; 建议把代码copy下来放在编译器查看&#xff08;因为很多备注在注释里面&#xff09; 线性模型(Linear Model)&#xff1a; import numpy as npimport matplotlib.pyplot as plt #绘图的包​x_data [1.0, 2.0, …

Cesium 地球网格构造

Cesium 地球网格构造 Cesium原理篇&#xff1a;3最长的一帧之地形(2&#xff1a;高度图) HeightmapTessellator 用于从高程图像创建网格。提供了一个函数 computeVertices&#xff0c;可以根据高程图像创建顶点数组。 该函数的参数包括高程图像、高度数据的结构、网格宽高、…

Gradle的简介、下载、安装、配置及使用流程

Gradle的简介、下载、安装、配置及使用流程 1.Gradle的简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置&#xff0c;也增加了基于Kotlin语言的kotlin-based DSL&#xff0c;抛弃了基于X…

AI项目六:基于YOLOV5的CPU版本部署openvino

若该文为原创文章&#xff0c;转载请注明原文出处。 一、CPU版本DEMO测试 1、创建一个新的虚拟环境 conda create -n course_torch_openvino python3.8 2、激活环境 conda activate course_torch_openvino 3、安装pytorch cpu版本 pip install torch torchvision torchau…