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

如何控制GitHub多Workflow触发逻辑?分支创建双流程触发问题

调整GitHub Workflow触发逻辑的方案

一、修改「Feature Branch WorkFlow」(仅代码推送时触发)

当前配置在创建新分支时会误触发,因为分支创建后会自动触发一次push事件。要避免这种情况,只需给push事件添加类型限制,排除分支创建时的推送:

name: Feature Branch WorkFlow
on:
  push:
    branches-ignore:
      - main
    # 只响应编辑、同步类型的推送,排除分支创建时的推送
    types: [edited, synchronize]

当你创建新分支时,对应的push事件类型为created,这里通过types排除后,只有日常代码提交推送会触发这个Workflow。

二、修改「Create App Service Slot」(仅从main分支创建新分支时触发)

需要先限定只响应分支创建事件,再通过Git命令判断新分支是否源自main分支:

name: Create App Service Slot
on:
  create:
    # 仅针对分支创建事件,排除标签创建
    branches:
      - '*'
    tags-ignore:
      - '*'
jobs:
  create-slot:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取完整代码历史
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 拉取所有分支历史,用于判断源分支

      - name: 检查分支是否源自main
        id: check-source
        run: |
          # 获取当前分支最新提交的哈希值
          COMMIT_HASH=$(git rev-parse HEAD)
          # 检查该提交是否存在于main分支中
          if git branch --contains "$COMMIT_HASH" | grep -qE '^[* ]+main$'; then
            echo "is_from_main=true" >> "$GITHUB_OUTPUT"
          else
            echo "is_from_main=false" >> "$GITHUB_OUTPUT"
          fi

      - name: 创建Azure应用服务槽
        if: steps.check-source.outputs.is_from_main == 'true'
        run: |
          # 这里替换成你的实际创建槽命令,比如Azure CLI操作
          az webapp deployment slot create --name <你的应用名> --resource-group <资源组名> --slot <槽名>

逻辑说明:

  1. 通过on.create.branches和tags-ignore,确保只有创建分支时才触发该Workflow;
  2. 拉取完整代码历史后,通过Git命令检查新分支的初始提交是否存在于main分支中,以此判断是否从main创建;
  3. 只有满足条件时,才执行创建应用服务槽的步骤。

最终效果验证

  • 从main分支创建新分支:仅「Create App Service Slot」执行;
  • 从非main分支创建新分支:「Create App Service Slot」的检查步骤不通过,不会创建槽;
  • 推送代码到非main分支:仅「Feature Branch WorkFlow」执行;
  • 推送代码到main分支:两个Workflow都不触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:59:55