You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码重新运行带参数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:17:39