如何控制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 <槽名>
逻辑说明:
- 通过
on.create.branches和tags-ignore,确保只有创建分支时才触发该Workflow; - 拉取完整代码历史后,通过Git命令检查新分支的初始提交是否存在于main分支中,以此判断是否从main创建;
- 只有满足条件时,才执行创建应用服务槽的步骤。
最终效果验证
- 从main分支创建新分支:仅「Create App Service Slot」执行;
- 从非main分支创建新分支:「Create App Service Slot」的检查步骤不通过,不会创建槽;
- 推送代码到非main分支:仅「Feature Branch WorkFlow」执行;
- 推送代码到main分支:两个Workflow都不触发。
内容的提问来源于stack exchange,提问作者kamil hussain
相关产品推荐
相关产品推荐

