Python-Jenkins 在 Jenkins 中的应用

2023-11-16

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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-Jenkins 在 Jenkins 中的应用 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 为什么从 Pandas 1.0 中删除了日期时间?

    我在 pandas 中处理大量数据分析并每天使用 pandas datetime 最近我收到警告 FutureWarning pandas datetime 类已弃用 并将在未来版本中从 pandas 中删除 改为从 datetime 模块
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • springboot的启动原理之@SpringBootConfiguration和@ComponentScan注解

    SpringBootApplication EnableTransactionManagement EnableScheduling ComponentScan basePackages cn MapperScan cn mapper pu
  • Vue element 日期选择器 el-date-picker设置选择范围在一周内

    需求 防止时间范围内的查询到数据过多 希望设置最大可选一周的是时间范围 完成效果 见下图 知道了怎么禁用时间 想要达到预期的效果 要拿到第一次选择的日期 查看element文档 onPick可返回每次选中的时间 完整代码如下
  • 51单片机按键控制数码管0~9_(51单片机)课设项目1-按键控制步进电机转向、转速、启停。...

    总体设计方案 硬件部分实现电机转动和数码管显示 包括控制开关模块 电机转动模块 数码管显示模块 软件部分实现对步进电机的控制功能 主要设计思想通过控制程序的开关来控制电机的转动启停 方向 速度 电源驱动AT89C51单片机 在单片机中装载程
  • git cz配置)

    git cz配置 npm install g commitizen echo path cz conventional changelog gt czrc
  • 基于 Web 端的人脸识别身份验证

    效果展示 人脸识别效果图 前言 近些年来 随着生物识别技术的逐渐成熟 基于深度学习的人脸识别技术取得了突破性进展 准确率显著提高 现阶段 人脸识别身份验证作为非常重要的身份验证方式 已被广泛的应用于诸多行业和领域 例如 支付宝付款 刷脸签到
  • 主流的深度学习优化方法(SGD,SGDM,Adagrad,RMSProp,Adam)

    文章目录 0 前言 1 SGD 2 SGD with momentum SGDM 3 Adagrad 4 RMSProp root mean square prop 5 Adam 0 前言 介绍主流的深度学习优化方法 SGD SGD wit
  • 登陆远程服务器的Tomcat管理页面

    在远程服务器上安装了一个tomcat8 5 配置好用户后重新启动tomcat 发现 8080可以访问 登录管理页面报403访问受限 详细信息如下 You are not authorized to view this page By def
  • C语言代码写直角三角形

    include
  • 关于BUCK-BOOST电路的负压生成

    在一些实际应用中 我们时常会用到需要提供负压的场合 针对负压的设计 小白之前就讲述过一种方式 即采用charge pump的方法 然而呢 由于其带负载能力的不足 往往在一些设计中不被采用 同时 小白之前还见到过呦采用变压器隔离绕组反接的方式
  • 斐波那契数列递归算法和非递归算法以及其时间复杂度分析

    1 在学习数据结构这门课的过程中 发现斐波那契数列的递归算法以及非递归算法 以及其时间复杂度分析是一个小难点 所以特别总结一下 斐波那契数列的表达式 Fibonacci数列简介 F 1 1 F 2 1 F n F n 1 F n 2 n g
  • 配置Flutter开发环境

    安装 Flutter SDK 下载好 Flutter SDK 压缩包 flutter windows 3 0 3 stable zip 将 Flutter SDK 压缩包 解压到一个目录下 设置环境变量 FLUTTER STORAGE BA
  • Lua : 流程控制也没啥,if/嵌套仅需知

    目录 1 if else end 语法 2 if elseif else end 语法 3 if的嵌套 Lua中流程控制 使用if 和if的嵌套就好 当然goto也可以用于流程控制 其实我在想 C C 中如此好用的switch 语法 Lua
  • Java研发京东4面:事务隔离+乐观锁+HashMap+秒杀设计+微服务(面试真题)

    在朋友圈看到一个以前的同事这些天去京东面试了 就让他整理了一下面试官问了些他什么 然后就有了这篇文章 这篇文章主要介绍了 Java岗 京东的四次面试 面试题全为面试真题 一面 基础面 约1小时 二面 问数据库较多 三面 综合面 约一个小时
  • 6.STM32中断优先级管理

    1 中断 stm32的芯片通常有90多个以上的中断 具有16级可编程的中断优先级 2 中断管理方法 1 首先对STM32中断进行分组 有组0 4 同时对每一个中断设置一个抢占优先级和一个响应优先级值 分组配置是在寄存器SCB gt AIRC
  • 【Python】工程与包(2)

    创建工程及第三方包管理 New environment using 新建的项目里有一个venv virtualenv 文件夹 专门存放本项目所依赖的第三方模块 Existing interpreter 表示新建的项目所依赖的第三方模块是存放
  • 推荐工具url

    https www processon com diagrams 很好的web画图工具 https www tapd cn letters from top nav worktable v2 产品 研发 测试工具
  • uboot环境变量的讲解

    1 环境变量的作用域和全局变量相同 环境变量的生命周期为一旦设置好环境变量并保存好后 下次开机还存在 而全局变量在关机后就灭亡了 下次开机产生了一个新的全局变量 2 环境变量如何参与程序运行 1 环境变量有2份 分别在Flash和DDR中
  • hadoop3.3.1单机版环境搭建详细流程记录

    1 在centos7中创建必要的目录 2 上传JDK安装包到tools目录 3 解压JDK到 opt server 目录 tar zxvf jdk 8u221 linux x64 tar gz C opt server 4 vim 未找到命
  • 视音频编解码技术零基础学习方法

    一直想把视音频编解码技术做一个简单的总结 可是苦于时间不充裕 一直没能完成 今天有着很大的空闲 终于可以总结一个有关视音频技术的入门教程 可以方便更多的人学习从零开始学习视音频技术 需要注意的是 本文所说的视音频技术 指的是理论层面的视音频
  • Python-Jenkins 在 Jenkins 中的应用

    Author rab Python 版本 3 9 Jenkins 版本 2 409 官方文档 https python jenkins readthedocs io en latest 目录 前言 一 案例 1 1 管理 Jenkins V