??項(xiàng)目中jenkins服務(wù)器遷移后,有一個(gè)git的證書配置有問題,需要去掉,項(xiàng)目中的有1000個(gè)job如果一個(gè)個(gè)改的話,太費(fèi)時(shí)了,因此想到通過api的形式來實(shí)現(xiàn)。
#安裝依賴
pip install python-jenkins
# 安裝優(yōu)雅的日志庫,操作留痕總歸是合理的
pip install loguru
job是根據(jù)名稱為唯一標(biāo)識(shí)的 如下圖 標(biāo)紅的就是job名稱:

image.png
??job配置返回是xml,根據(jù)項(xiàng)目情況 修改對(duì)應(yīng)的xml,這里采用的正則替換,當(dāng)然也可以按xml的方式遍歷修改,只是比較麻煩。
大體的處理邏輯:
- 獲取所有的job
- 遍歷job根據(jù)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配置 返回內(nèi)容為xml
job_xml = server.get_job_config(job_name)
# 正則替換指定的xml內(nèi)容
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} 跳過修改")