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:上游工作流显式传递分支参数到下游
如果你需要传递更多上游的自定义参数,也可以通过上游工作流输出、下游读取的方式实现:
- 先修改上游
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 # 其他上游步骤省略
- 下游工作流直接读取上游输出的参数即可:
${{ github.event.workflow_run.outputs.branch }}
内容的提问来源于stack exchange,提问作者Matt Holdgate
相关产品推荐
相关产品推荐

