当前位置:网站首页>Jenkins 导出、导入 Job Pipeline
Jenkins 导出、导入 Job Pipeline
2022-08-04 04:01:00 【LeoHsiao1】
Jenkins 网页上可以手动修改 Job Pipeline 配置 ,但是大批量修改时比较麻烦。有几种批量修改的方法:
- 到 jenkins_home 安装目录下,执行 zip -r jobs.zip jobs/*/config.xml
,可以导出 Job 配置文件。不过修改了之后,需要重启 Jenkins 才会生效。
- 通过 Jenkins API 导出、导入 Job 配置文件。
本文给出第二种方法的 Python 示例代码:
""" - 该脚本用于导出、导入 Jenkins 的 Pipeline 脚本,保存为 XML 文件 - 需要安装 pip install jenkinsapi - 导入的配置文件包含非 ASCII 码时,需要修改 update_config() 的定义代码,注释 config = str(config) 一行 """
import os
import re
from jenkinsapi.jenkins import Jenkins
# 连接 Jenkins
jk = Jenkins('https://jenkins.test.com/', username='***', password='***', timeout=10, useCrumb=True)
config_suffix = '.xml'
def export_job(job_pattern='.*', work_dir='.'):
for job_name in jk.keys():
if not re.findall(job_pattern, job_name):
continue
config = jk.get_job(job_name).get_config()
config_file = os.path.normpath(os.path.join(work_dir, job_name + config_suffix))
os.makedirs(os.path.dirname(config_file), exist_ok=True)
with open(config_file, 'w', encoding='utf-8') as f:
f.write(config)
def import_job(job_pattern='.*', work_dir='.'):
for line in os.walk(work_dir, onerror=print):
sub_dir,dir_list,file_list = line
for file in file_list:
if file[-len(config_suffix):] != config_suffix:
continue
# 获取 job name
path_fileds = list(os.path.split(sub_dir)) + [file]
job_name = '/'.join(path_fileds).removeprefix(work_dir.replace('\\', '/')).removeprefix('/').removesuffix(config_suffix)
# 读取 job 的配置文件
if not re.findall(job_pattern, job_name):
continue
config_file = os.path.join(sub_dir, file)
with open(config_file, 'r', encoding='utf-8') as f:
config = f.read()
# 导入 job 配置
if jk.has_job(job_name):
jk.get_job(job_name).update_config(config.encode('utf-8'))
print('已导入Job:', job_name)
else:
print('Jenkins不存在该Job:', job_name)
# 自动创建 Job 会失败,目前只能导入 Jenkins 上已创建的 Job
# jk.create_job(job_name, config)
# 执行导出、导入
export_job('test.*')
import_job('test.*')
边栏推荐
猜你喜欢
劝退背后。
数据安全峰会2022 | 美创DSM获颁“数据安全产品能力验证计划”评测证书
案例 | 重庆银行流动数据安全挑战及应对实践
new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解
帮助企业实现数字化转型成功的八项指导原则
如果禁用了安全启动,GNOME 就会发出警告
Y86. Chapter iv Prometheus giant monitoring system and the actual combat, Prometheus storage (17)
汇编语言之栈
SVM介绍以及实战
DIY电工维修如何拆卸和安装开关面板插座
随机推荐
Tensors - Application Cases
Reproduce 20-character short domain name bypass
内网服务器访问远程服务器的端口映射
pnpm 是凭什么对 npm 和 yarn 降维打击的
[Medical Insurance Science] To maintain the safety of medical insurance funds, we can do this
MySQL query optimization and tuning
系统设计.如何设计一个秒杀系统(完整版 转)
42. 接雨水
安装postgis时报找不到“POSTGIS_VERSION”这个函数
Y86. Chapter iv Prometheus giant monitoring system and the actual combat, Prometheus storage (17)
【id类型和NSObject指针 ObjectIve-C中】
【 observe 】 super fusion: the first mention of "calculate net nine order" evaluation model, build open prosperity of power network
什么是数字孪生智慧城市应用场景
2022杭电多校联赛第五场 题解
How to systematically plan and learn software testing?
KingbaseES数据库启动失败,报“内存段超过可用内存”
MySQL Query Exercise (1)
How class only static allocation and dynamic allocation
SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropri
FFmpeg —— 通过修改yuv,将视频转为黑白并输出(附源码)