合并PR时GitHub Actions重复运行两次的问题如何解决?
GitHub Action合并PR重复触发解决方案
重复触发原因
你遇到的合并PR时两次运行的问题,根源是使用变基合并(Rebase Merge)或压缩合并(Squash Merge)时的GitHub机制:
- 合并操作执行前,GitHub会更新PR对应的提交HEAD,触发
pull_request的synchronize事件,运行第一次workflow - 合并完成后新提交推送到
master/preview分支,触发push事件,运行第二次workflow
调整方案
你可以直接在原有配置基础上新增Workflow级别的执行条件,跳过PR合并时触发的pull_request事件运行,仅保留push事件的构建:
name: Continuous Integration # 新增全局执行条件 if: github.event_name != 'pull_request' || github.event.pull_request.merged == false on: schedule: - cron: "0 */3 * * *" push: branches: - master - preview pull_request: types: [ opened, synchronize, reopened ] branches: - master - preview # 后续保留你原有的jobs配置即可
规则说明
- 非PR事件(定时任务、push事件)不受条件限制,正常运行
- PR事件仅在PR未合并状态下(新建、提交新代码、重新打开PR)运行,PR合并时触发的
synchronize事件会因为merged字段为true被直接跳过
可选替代方案
如果你开启了分支保护规则,要求PR合并前必须通过workflow检查,上述全局条件可能导致合并不通过,可以改为给pull_request对应的job单独加条件,或者改用普通合并(Create a merge commit)模式,该模式不会触发合并前的synchronize事件,也不会出现重复运行问题。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

