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

如何配置Buildbot 3.X主节点,限制保留构建数量并清理已合并PR构建?

Buildbot 3.X 构建保留与清理配置方案

一、配置指定数量的构建保留

Buildbot 3.X支持通过两种方式设置构建保留数量:

  • 单个构建器配置:定义构建器时,给BuildFactory添加keepBuilds参数,指定该构建器要保留的最近构建数。示例代码:
from buildbot.plugins import util, steps

factory = util.BuildFactory()
factory.addStep(steps.ShellCommand(command=["echo", "execute build"]))
# 仅保留最近10次构建
factory.keepBuilds = 10

c['builders'].append(util.BuilderConfig(
    name="pr-builder",
    workernames=["worker-node"],
    factory=factory
))
  • 全局默认配置:如果要给所有构建器统一设置保留规则,可在master.cfg的全局配置中定义:
c = BuildmasterConfig = {}
# 全局默认保留最近5次构建
c['keepBuilds'] = 5

二、清理已合并Pull Request的构建

针对PR场景,可通过以下几种方式清理已合并PR的冗余构建:

1. 结合版本控制系统API批量清理

编写自定义脚本,定期查询GitHub/GitLab等平台获取已合并PR列表,再调用Buildbot API删除对应构建。示例逻辑:

import requests

# Buildbot API地址
BB_API = "http://your-buildbot-master:8010/api/v2"
TARGET_BUILDER = "pr-builder"

# 获取目标构建器的所有构建
builds_res = requests.get(f"{BB_API}/builders/{TARGET_BUILDER}/builds")
builds = builds_res.json()['builds']

for build in builds:
    build_id = build['buildid']
    pr_num = build['properties'].get('pr_number', [None])[0]
    if not pr_num:
        continue
    # 替换为实际检查PR是否合并的逻辑(如调用GitHub API)
    pr_is_merged = check_pr_merge_status(pr_num)
    if pr_is_merged:
        # 删除对应的构建
        requests.delete(f"{BB_API}/builds/{build_id}")
        print(f"Deleted build {build_id} for merged PR #{pr_num}")

2. 构建完成后自动检查清理

在构建流程末尾添加自定义步骤,构建完成后立即检查对应PR状态,若已合并则删除当前构建。示例配置:

from buildbot.plugins import steps, util

def clean_merged_pr_build(step):
    pr_num = step.build.getProperty("pr_number")
    if not pr_num:
        return
    if check_pr_merge_status(pr_num):
        # 删除当前构建记录及产物
        step.build.master.data.updates.deleteBuild(step.build)

# 构建步骤
factory.addStep(steps.ShellCommand(command=["npm", "run", "build"]))
# 添加清理步骤
factory.addStep(steps.MasterShellCommand(
    command=["python", "/opt/scripts/check_pr_merge.py", util.Property("pr_number")],
    doStepIf=lambda step: step.build.getProperty("pr_number") is not None,
    onSuccess=clean_merged_pr_build
))

3. 使用内置buildbot clean命令

结合定时任务(如Linux cron),用Buildbot内置命令定期清理符合条件的构建。示例命令:

# 删除pr-builder中已完成、超过7天的构建
buildbot clean master.cfg --builder pr-builder --complete --older-than 7d

如果要精准删除已合并PR的构建,可先导出对应构建ID列表,再批量删除:

# 假设已将待删除构建ID存入build_ids.txt
while read build_id; do
    buildbot clean master.cfg --buildid $build_id
done < build_ids.txt

注意事项

  • 确认删除构建时,Buildbot会同步清理工作目录;若有自定义产物存储路径,需额外添加清理逻辑。
  • 生产环境中先测试清理规则,避免误删未合并PR的构建记录。
  • 确保脚本或命令拥有足够权限访问版本控制系统API和Buildbot API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 12:12:35