将Bors-ng迁移至GitHub合并队列对接自建Buildbot CI遇问题求助
GitHub Merge Queue 迁移异常排查方案
一、问题1:GitHub未生成gh-readonly-queue合并队列分支
排查与修复步骤:
- 检查PR状态与前置检查:
确保PR已标记为「准备就绪」(非草稿状态),且PR自身的所有必需检查项都已通过。GitHub仅会将符合条件的PR加入合并队列,才会生成临时分支。 - 验证main分支保护规则的必需检查配置:
进入仓库Settings > Branches > Branch protection rules,确认main分支的「Require status checks to pass before merging」列表中,已添加Buildbot的检查项,且该检查项的名称与Buildbot提交状态时使用的context完全一致。 - 确认工作流触发规则有效性:
检查.github/workflows/ci.yml的触发规则是否正确:
同时确保工作流没有额外的on: pull_request: merge_group:if条件限制,导致merge_group事件无法触发。 - 核对Buildbot分支监听配置:
确认Buildbot的ChangeFilter中,branch_re正则^gh-readonly-queue/正确无误,REPOS变量指向目标仓库,且builderNames对应的构建脚本能正常执行。
二、问题2:Buildbot构建失败但GitHub仍合并分支
核心原因与修复:
- 分支保护规则作用范围错误:
gh-readonly-queue/*的分支保护规则不影响GitHub Merge Queue的合并决策——合并逻辑仅受**基准分支(main)**的保护规则约束。需删除为临时分支添加的保护规则,恢复main分支的正确配置。 - 必需检查未关联到合并队列流程:
在main分支的保护规则中,务必将Buildbot的检查项设为必需,且确保Buildbot会针对gh-readonly-queue开头的临时分支提交状态报告。若GitHub未收到该分支的检查状态,会默认认为检查通过或跳过,导致错误合并。 - 验证Buildbot状态提交准确性:
检查Buildbot是否向GitHub的临时分支(而非原PR分支)提交了正确的状态结果(success/failure),且提交的context名称与main分支保护规则中的必需检查名称完全匹配。
修正后的标准配置流程
- Buildbot合并队列分支配置(保持现有配置不变,确认正则与仓库参数正确):
c['schedulers'].append(schedulers.SingleBranchScheduler( name="simple-ghmq-branches-scheduler", change_filter=util.ChangeFilter( branch_re=re.compile("^gh-readonly-queue/"), repository=REPOS, ), builderNames=["buildbot-build-script"], treeStableTimer=TREE_STABLE_TIMEOUT)) - GitHub main分支保护规则:
- 启用合并队列(Enable merge queue)
- 勾选「Require status checks to pass before merging」,添加Buildbot检查项到必需列表
- 按需勾选「Require branches to be up to date before merging」
- 工作流触发规则(保持现有配置):
on: pull_request: merge_group: - 测试流程:提交测试PR,确认PR检查通过后点击「准备就绪后合并」,验证GitHub生成临时分支、Buildbot触发构建、状态报告正确,且只有检查通过时才会合并。
内容的提问来源于stack exchange,提问作者Edd Barrett
相关产品推荐
相关产品推荐

