如何配置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
相关产品推荐
相关产品推荐

