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

GitHub Actions:创建PR触发两个工作流,如何实现分离触发?

解决GitHub Actions工作流在PR时重复触发的问题

嘿,这个问题其实挺常见的——当你推送代码到关联了PR的分支,或者创建PR的时候,GitHub会同时触发pull_request和push事件,所以两个工作流都跑起来了。要实现二者分离其实很简单,你只需要给push.yml添加过滤条件就行,这里有两种靠谱的方案:

方案一:排除关联PR的推送触发

这种方法会让push.yml只在没有关联PR的推送时运行(比如直接推送到主分支、release分支等),而推送PR分支时不会触发。你只需要给push.yml的jobs加上if条件:

name: Push workflow
on: push
jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    # 关键条件:仅当当前推送没有关联PR时才执行
    if: !github.event.pull_request
    steps:
      - uses: actions/checkout@v4
      # 你的构建、测试、部署步骤...

这个条件利用了GitHub Actions的上下文:当推送来自PR分支时,github.event.pull_request会存在(有值),条件!github.event.pull_request就会不成立,job直接跳过;而直接推送到非PR分支时,这个条件成立,job正常执行。

方案二:限制push.yml仅在指定分支触发

如果你的部署只需要针对特定分支(比如main、release/*这类正式分支),可以直接在push.yml的触发器里指定分支,这样只有推送到这些分支时才会触发工作流,PR分支的推送自然不会触发:

name: Push workflow
on:
  push:
    # 只在推送到这些分支时触发
    branches:
      - main
      - 'release/**'
jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # 你的构建、测试、部署步骤...

这种方式更安全,因为它从根源上限制了push.yml的触发场景,避免误部署PR分支的代码。

选哪种方案取决于你的需求:如果需要在非PR的任意分支推送时都运行push.yml,就用方案一;如果只需要在特定正式分支推送时运行,方案二更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:02:44