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

GitHub workflow_run触发的工作流如何获取上游运行对应的分支名称?

问题原因

通过workflow_run触发的工作流,运行时默认的GITHUB_REF环境变量指向下游工作流自身仓库的默认分支,而非触发本次事件的上游工作流对应的分支,所以你用原有脚本提取分支名会返回空值。

解决方案

方案1:直接从workflow_run事件上下文读取(最简便)

GitHub的workflow_run事件本身已经内置了上游工作流对应的分支字段,你不需要额外执行脚本提取,直接调用上下文变量即可:
${{ github.event.workflow_run.head_branch }}
你可以直接在下游工作流的分支校验逻辑里使用这个变量,也可以修改你现有的分支提取步骤:

- name: Extract branch name
  shell: bash
  run: echo "##[set-output name=branch;]${{ github.event.workflow_run.head_branch }}"
  id: extract_branch

如果需要直接在job级别做分支过滤,你可以直接在job的if判断中添加规则,满足你仅对feature/*分支执行逻辑的需求:

jobs:
  deploy-pre-prod:
    if: ${{ github.event.workflow_run.conclusion == 'success' && startsWith(github.event.workflow_run.head_branch, 'feature/') }}
    runs-on: ubuntu-latest
    # 后续步骤省略

方案2:上游工作流显式传递分支参数到下游

如果你需要传递更多上游的自定义参数,也可以通过上游工作流输出、下游读取的方式实现:

  1. 先修改上游Validate Pre Prod工作流,配置全局输出参数:
# 上游工作流配置
on:
  # 你原来的上游触发规则不变
  push:
    branches: [ "feature/*" ]

# 定义工作流级别的输出参数
outputs:
  branch: ${{ jobs.build.outputs.branch }} # 对应下面job的id和step的output名

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      branch: ${{ steps.extract_branch.outputs.branch }}
    steps:
      - name: Extract branch name
        shell: bash
        run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
        id: extract_branch
      # 其他上游步骤省略
  1. 下游工作流直接读取上游输出的参数即可:
    ${{ github.event.workflow_run.outputs.branch }}

内容的提问来源于stack exchange,提问作者Matt Holdgate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:24:06