当前位置:网站首页>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.*')
边栏推荐
- new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail
- 2 Gigabit Optical + 6 Gigabit Electric Rail Type Managed Industrial Ethernet Switch Supports X-Ring Redundant Ring One-key Ring Switch
- docker+网桥+redis主从+哨兵模式
- 案例 | 重庆银行流动数据安全挑战及应对实践
- 【项目实现】Boost搜索引擎
- 深度学习之 10 卷积神经网络3
- Exclude_reserved_words 排除关键字
- 三分建设,七分管理!产品、系统、组织三管齐下节能降耗
- 汇编语言之栈
- MRS: Introduction to the use of Alluxio
猜你喜欢
随机推荐
Mobile payment online and offline payment scenarios
[Ryerson emotional speaking/singing audiovisual dataset (RAVDESS)]
Gigabit 2 X light 8 electricity management industrial Ethernet switches WEB management - a key Ring Ring net switch
MySQL Query Exercise (1)
SQL interview Questions
Oracle与Postgresql在PLSQL内事务回滚的重大差异
系统设计.秒杀系统
XSS related knowledge points
y86.第四章 Prometheus大厂监控体系及实战 -- prometheus存储(十七)
外卖店优先级
Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析
Mockito unit testing
目标检测-中篇
How to systematically plan and learn software testing?
JVM的内存模型简介
基于 SSE 实现服务端消息主动推送解决方案
Exclude_reserved_words 排除关键字
Tensors - Application Cases
嵌入式数据库开发编程MySQL(全)
FPGA解析B码----连载3








