项目中jenkins服务器迁移后,有一个git的证书配置有问题,需要去掉,项目中的有1000个job如果一个个改的话,太费时了,因此想到通过api的形式来实现。
#安装依赖
pip install python-jenkins
# 安装优雅的日志库,操作留痕总归是合理的
pip install loguru
job是根据名称为唯一标识的 如下图 标红的就是job名称:
job配置返回是xml,根据项目情况 修改对应的xml,这里采用的正则替换,当然也可以按xml的方式遍历修改,只是比较麻烦。
大体的处理逻辑:
- 获取所有的job
- 遍历job根据job名称获取job的配置
- 修改配置的xml 再将修改后的xml提交
代码如下:
import re
import jenkins
from loguru import logger
logger.add("jenkins_opt.log")
jenkins_server_url = "http://xxxxx:8080/jenkins/"
username = "xxxx"
password = "xxxxx"
# 登录jenkins
server = jenkins.Jenkins(jenkins_server_url, username=username, password=password)
# 获取所有的job
jobs = server.get_all_jobs()
# 需要匹配的字段
pattern = re.compile("<credentialsId>.*</credentialsId>")
# 遍历job修改配置
for job in jobs:
# 获取job名称
job_name = job.get("name")
# 获取job配置 返回内容为xml
job_xml = server.get_job_config(job_name)
# 正则替换指定的xml内容
if re.search(pattern, job_xml):
# 将字段替换为空
job_xml = pattern.sub('', job_xml)
try:
# 提交job新的配置
server.reconfig_job(job_name, job_xml)
logger.info(f"修改成功:{job_name}")
except Exception as e:
logger.error(f"{job_name} 修改异常:{e}")
else:
logger.info(f"{job_name} 跳过修改")