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

GitHub Actions中workflow_run触发分支不一致问题求助

GitHub Actions workflow_run触发工作流后checkout错误分支的解决方法

问题描述

我配置了两个GitHub Actions工作流:

  1. Infrastructure Provisioning:支持手动触发(workflow_dispatch)和发布触发,可在指定分支(如分支A)运行
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:13:17