GitHub Actions中workflow_run触发分支不一致问题求助
GitHub Actions workflow_run触发工作流后checkout错误分支的解决方法
问题描述
我配置了两个GitHub Actions工作流:
Infrastructure Provisioning:支持手动触发(workflow_dispatch)和发布触发,可在指定分支(如分支A)运行Ansible: setup docker on machines:通过workflow_run监听第一个工作流的完成事件触发
当前问题:在分支A运行第一个工作流后,第二个工作流成功触发,但始终checkout main分支的代码,而非分支A。尝试过设置ref: ${{ github.event.workflow_run.head_sha }}和${{ github.ref }}均无效,只能将分支合并到main后才能正常测试。
解决方案
方案1:触发对应分支的第二个工作流文件(推荐)
workflow_run触发的工作流默认使用**仓库默认分支(main)**里的工作流定义,无法直接使用分支A中的第二个工作流文件。若需要分支A的工作流逻辑生效,改用workflow_dispatch触发第二个工作流:
修改第一个工作流
在terraform-provision job的末尾添加触发步骤:
- name: Trigger Ansible workflow uses: actions/github-script@v7 with: script: | github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: 'ansible-setup-docker.yml', // 替换为第二个工作流的实际文件名 ref: context.ref, // 传递当前运行的分支(分支A) })
修改第二个工作流的触发条件
将on部分替换为:
on: workflow_dispatch:
此方案下,第一个工作流在分支A运行时,会触发分支A中的第二个工作流文件,且默认checkout分支A的代码。
方案2:保留workflow_run触发,仅拉取分支A的代码
若不需要分支A的第二个工作流定义,仅需拉取分支A的代码,修改第二个工作流的checkout步骤:
- name: Checkout repository uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 # 拉取完整仓库历史,避免浅克隆导致无法找到目标SHA
github.event.workflow_run.head_sha对应第一个工作流运行时的提交SHA,通过该值可精准拉取分支A的代码;设置fetch-depth: 0可避免默认浅克隆带来的SHA无法匹配问题。
内容的提问来源于stack exchange,提问作者Bachar ELkarni
相关产品推荐
相关产品推荐

