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

如何通过Jenkins API高效获取所有层级的构建日志?

获取Jenkins所有层级构建日志的解决方案

核心思路:递归遍历Jenkins的文件夹与任务

Jenkins的API中,文件夹和普通任务都属于jobs范畴,通过_class字段可以区分类型:

  • 文件夹的_class通常为com.cloudbees.hudson.plugins.folder.Folder
  • 普通构建任务的_class比如hudson.model.FreeStyleProject、org.jenkinsci.plugins.workflow.job.WorkflowJob等

通过递归遍历每个层级的jobs,就能覆盖所有嵌套文件夹中的任务,同时避免一次性拉取全量数据导致的内存问题。

实现代码示例

import requests

JENKINS_URL = "https://build.org.com"
username = "your_username"
access_token = "your_access_token"

session = requests.Session()
session.auth = (username, access_token)

def traverse_jobs(job_url):
    # 获取当前job的基础信息,仅请求需要的字段以缩小响应体积
    job_api_url = f"{job_url.rstrip('/')}/api/json?tree=name,_class,jobs[name,url,_class]"
    job_data = session.get(job_api_url).json()
    
    # 如果是文件夹,递归遍历内部的jobs
    if job_data["_class"].startswith("com.cloudbees.hudson.plugins.folder.Folder"):
        for sub_job in job_data["jobs"]:
            traverse_jobs(sub_job["url"])
    else:
        # 处理普通构建任务,获取构建日志
        get_job_build_logs(job_url)

def get_job_builds(job_url, limit=10):
    # 分页获取构建列表,避免一次性拉取过多构建数据
    builds_api_url = f"{job_url.rstrip('/')}/api/json?tree=builds[number,url]{{0,{limit}}}"
    job_data = session.get(builds_api_url).json()
    return job_data.get("builds", [])

def get_job_build_logs(job_url):
    builds = get_job_builds(job_url)
    if not builds:
        print(f"任务 {job_url} 无构建记录")
        return
    
    # 遍历每个构建,流式读取日志避免内存溢出
    for build in builds:
        log_url = f"{build['url'].rstrip('/')}/consoleText"
        print(f"=== 读取构建 {build['number']} 的日志 ===")
        with session.get(log_url, stream=True) as response:
            for chunk in response.iter_content(chunk_size=1024*1024):
                if chunk:
                    # 可替换为写入文件、存储数据库等自定义逻辑
                    print(chunk.decode('utf-8'), end='')

# 从Jenkins根节点开始遍历所有任务
root_api_url = f"{JENKINS_URL}/api/json?tree=jobs[name,url,_class]"
root_data = session.get(root_api_url).json()
for root_job in root_data["jobs"]:
    traverse_jobs(root_job["url"])

关键优化点

  • 递归遍历:自动处理任意深度的嵌套文件夹,不会遗漏深层任务
  • 精简API请求:通过tree参数只获取必要字段,大幅减少响应数据量
  • 分页获取构建:限制每次拉取的构建数量,避免单请求返回过大数据
  • 流式读取日志:分块加载日志内容,防止大日志直接占用大量内存

内容的提问来源于stack exchange,提问作者Abhishek Rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:55:18