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
相关产品推荐
相关产品推荐

