python导出jenkins发布目录的清单方法
python导出jenkins发布目录的清单方法
任务名称 发布分支 Git 地址 部署IP
app管理后台 */app5Console/release/master git@your ip address:test/WebSystem.git 未找到
经过测试: 部署IP导不出来,其他的任务名称 发布分支 Git 地址 可以导出来。
需要安装:
pip3 install python-jenkins
import jenkins import re import xml.etree.ElementTree as ET import csv # 配置 Jenkins JENKINS_URL = "http://your ip address/jenkins/" USERNAME = "account name" PASSWORD = "account pwd" # 连接 Jenkins server = jenkins.Jenkins(JENKINS_URL, username=USERNAME, password=PASSWORD) # 获取所有 Job(可限定 view,如 server.get_jobs(view_name='移动m站')) jobs = server.get_jobs() results = [] for job in jobs: job_name = job['name'] git_url = "未配置 Git" branch = "未知" deploy_ip = "未找到" try: # 1. 获取 Job 的 config.xml(XML 格式) config_xml_str = server.get_job_config(job_name) # 2. 解析 XML 提取 Git 地址和分支 root = ET.fromstring(config_xml_str) # 查找 Git SCM 配置 scm = root.find(".//scm[@class='hudson.plugins.git.GitSCM']") if scm is not None: # 提取 Git URL url_elem = scm.find(".//userRemoteConfigs/hudson.plugins.git.UserRemoteConfig/url") if url_elem is not None: git_url = url_elem.text # 提取分支(优先取参数化分支,否则取固定分支) branch_elem = scm.find(".//branches/hudson.plugins.git.BranchSpec/name") if branch_elem is not None: branch = branch_elem.text.replace("*/", "") # 去掉通配符 # 3. 从参数化构建中覆盖分支(若有) param_defs = root.findall(".//parameterDefinitions") for param in param_defs: for p in param: if p.tag == "hudson.model.StringParameterDefinition": name_elem = p.find("name") def_elem = p.find("defaultValue") if name_elem is not None and def_elem is not None: if "branch" in name_elem.text.lower(): branch = def_elem.text # 4. 获取最后一次构建日志,解析部署 IP last_build = server.get_job_info(job_name).get('lastCompletedBuild') if last_build: build_num = last_build['number'] console = server.get_build_console_output(job_name, build_num) ip_match = re.search(r'(?:部署到|Disconnecting|Deploy to|host=|IP=|172\.16|10\.0)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', console) if ip_match: deploy_ip = ip_match.group(1) except Exception as e: print(f"[ERROR] 处理 {job_name} 失败: {str(e)[:100]}...") # 记录结果 results.append({ "任务名称": job_name, "发布分支": branch, "Git 地址": git_url, "部署IP": deploy_ip }) # 打印到控制台 print("\n任务名称\t\t发布分支\t\tGit 地址\t\t部署IP") for r in results: print(f"{r['任务名称'][:20]:<20} {r['发布分支'][:15]:<15} {r['Git 地址'][:30]:<30} {r['部署IP']}") # 导出 CSV csv_file = "jenkins_jobs_full_export.csv" with open(csv_file, "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["任务名称", "发布分支", "Git 地址", "部署IP"]) writer.writeheader() writer.writerows(results) print(f"\n✅ 导出完成:{csv_file}")
浙公网安备 33010602011771号