如何通过代码重新运行带参数的Jenkins任务(不使用Rebuild插件)
批量重新构建Jenkins任务的具体Python实现方案
刚好我之前做过类似的批量Jenkins构建任务,给你两个直接能用的Python实现方案,完全符合你的需求,不用去翻那些晦涩的API文档。
前提准备
- 安装
requests库:pip install requests - 你的Jenkins服务器要开启API访问权限
- 获取Jenkins账号的API Token(在个人设置 → API Token里生成)
方案1:直接传入已知参数触发构建
如果已经有每个任务对应的参数集合(比如从历史记录里导出了80个任务的参数),直接用这个方案最省事。
import requests from requests.auth import HTTPBasicAuth # 替换成你的Jenkins配置 JENKINS_URL = "http://你的Jenkins地址:8080" USERNAME = "你的用户名" API_TOKEN = "你的API Token" # 80个任务的信息:job路径(比如"folder1/job/x"、"view1/job/x")+ 对应参数 jobs_to_rebuild = [ {"job_path": "folderA/job/x", "parameters": {"ENV": "test", "VERSION": "v1.0"}}, {"job_path": "folderB/job/x", "parameters": {"ENV": "prod", "VERSION": "v1.1"}}, # ... 剩下的78个任务按这个格式补充 ] auth = HTTPBasicAuth(USERNAME, API_TOKEN) headers = {"Content-Type": "application/x-www-form-urlencoded"} for job in jobs_to_rebuild: build_api_url = f"{JENKINS_URL}/job/{job['job_path']}/buildWithParameters" # 发送构建请求 response = requests.post(build_api_url, auth=auth, headers=headers, data=job['parameters']) if response.status_code in [200, 201, 202]: print(f✅ 成功触发任务 {job['job_path']} 的构建") else: print(f❌ 触发任务 {job['job_path']} 失败,状态码:{response.status_code},响应:{response.text}")
方案2:自动拉取历史构建参数再触发构建(类似Rebuild插件功能)
如果不知道每个任务的参数,想要自动获取历史构建的参数(比如最近一次运行的参数)再重新构建,用这个方案就不用手动整理参数了。
import requests from requests.auth import HTTPBasicAuth import json # 替换成你的Jenkins配置 JENKINS_URL = "http://你的Jenkins地址:8080" USERNAME = "你的用户名" API_TOKEN = "你的API Token" # 80个任务的job路径列表 job_paths = [ "folderA/job/x", "folderB/job/x", "viewC/job/x", # ... 剩下的77个任务路径补充 ] auth = HTTPBasicAuth(USERNAME, API_TOKEN) for job_path in job_paths: try: # 第一步:获取任务最近一次构建的编号 job_info_url = f"{JENKINS_URL}/job/{job_path}/api/json?tree=lastBuild[number]" job_response = requests.get(job_info_url, auth=auth) job_response.raise_for_status() last_build_num = job_response.json()['lastBuild']['number'] # 第二步:拉取该次构建的参数 build_params_url = f"{JENKINS_URL}/job/{job_path}/{last_build_num}/api/json?tree=actions[parameters[name,value]]" params_response = requests.get(build_params_url, auth=auth) params_response.raise_for_status() build_data = params_response.json() # 整理参数为键值对 build_params = {} for action in build_data.get('actions', []): if 'parameters' in action: for param in action['parameters']: build_params[param['name']] = param['value'] # 第三步:触发重新构建 if build_params: build_url = f"{JENKINS_URL}/job/{job_path}/buildWithParameters" print(f"🔍 任务 {job_path} 历史构建参数:{build_params}") else: build_url = f"{JENKINS_URL}/job/{job_path}/build" print(f"ℹ️ 任务 {job_path} 无参数,直接触发构建") build_response = requests.post(build_url, auth=auth, data=build_params) build_response.raise_for_status() print(f✅ 成功重新构建任务 {job_path}") except Exception as e: print(f❌ 处理任务 {job_path} 失败:{str(e)}")
注意事项
- 确保你的Jenkins账号拥有Job/Build权限,以及读取任务、构建信息的权限
- 如果任务在嵌套文件夹里,job路径要写成
folder1/folder2/job/x这种层级格式 - 如果你需要重新构建指定的历史构建(不是最近一次),可以把
lastBuild换成具体的构建编号,或者遍历历史构建列表
内容的提问来源于stack exchange,提问作者Nirzari
相关产品推荐
相关产品推荐

