如何为GitHub Merge Group创建专属必填检查项?
Merge Queue专属必填检查的Concourse实现方案
问题背景
我有一套在常规PR上运行正常的测试集,这些Action已经在GitHub分支保护设置中设为必填项。现在想在MERGE QUEUE流水线中添加一项仅针对Merge Group的专属必填检查,但发现GitHub分支保护的所有必填项都会被校验,无法单独为Merge Group创建专属必填项。尝试过创建需通过的外部URL检查,但不知道怎么实现。不想在GitHub YAML里用条件判断控制运行,想了解Concourse里的可行方案,比如创建触发Push/PR/MergeQueue的Webhook并添加运行条件,或者封装为GitHub Action而非通过设置定义的Webhook。
方案1:Concourse Webhook触发+条件过滤
- 配置GitHub Webhook:在仓库设置里建一个指向Concourse流水线的Webhook,触发事件选
merge_group、pull_request和push这三个。 - 流水线加条件分支:用Concourse的
when子句或者conditions配置,根据Webhook传过来的事件类型区分场景:- 事件是
merge_group时,只跑Merge Group专属的检查任务。 - 事件是
pull_request时,执行常规PR测试集。
- 事件是
- 同步检查状态到GitHub:在Concourse任务里调用GitHub Checks API,把专属检查的结果同步到Merge Group的检查列表,之后把这个外部检查设为分支保护的必填项就行。
方案2:封装成GitHub Action替代Webhook设置
- 写个专属Merge Group检查的Action:在Action里直接调用Concourse的流水线触发接口,只有Merge Queue事件触发时才启动Concourse的专属检查任务。
- 限定Action触发条件:在Action的yaml里指定只在
merge_group事件下运行,避免PR或Push时触发。 - 设为必填项:把这个自定义Action的检查结果加到分支保护的必填项里,这样只有Merge Queue运行时才要求过这个检查,常规PR不受影响。
外部URL检查的实现方法
如果要走外部URL检查的路子:
- 在Concourse里搭个专门的流水线,只响应
merge_group事件,跑完专属检查后,暴露一个状态接口——比如返回200就是通过,其他状态是失败。 - 在GitHub分支保护的“必填检查”里加这个外部URL,GitHub会自动轮询接口状态,只有接口返回通过时,Merge Group才能完成合并。
内容的提问来源于stack exchange,提问作者Fallenreaper
相关产品推荐
相关产品推荐

