如何在GitHub Actions中复用其他可重用工作流的输出?
如何在GitHub Actions可重用工作流之间传递输出值?
完全可以实现你的需求,但当前配置有几处需要调整,具体步骤如下:
1. 让生成CalVer的工作流(called-workflow1.yaml)暴露输出值
你现在的被调用工作流1只在步骤里生成了VERSION,但没把这个值暴露给调用它的主工作流。得在calver job里添加outputs字段,把步骤的输出映射为job级别的输出:
# called-workflow1.yaml jobs: calver: name: Create CalVer tag outputs: VERSION: ${{ steps.calVer.outputs.VERSION }} # 把步骤的输出暴露为job输出 steps: - name: Calver tag uses: StephaneBour/actions-calver@1.4.4 if: ${{ github.ref == 'refs/heads/main' }} id: calVer with: date_format: "%Y-%m-%d" release: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
2. 在主调用工作流中传递输出给第二个可重用工作流
主工作流里,call-workflow-calver job执行完成后,它的输出可以通过jobs.call-workflow-calver.outputs.VERSION获取。接下来要把这个值作为输入参数传递给call-workflow-echo:
# 主调用工作流 jobs: call-workflow-calver: uses: ./.github/workflows/called-workflow1.yaml secrets: inherit call-workflow-echo: needs: call-workflow-calver uses: ./.github/workflows/called-workflow2.yaml secrets: inherit with: image_version: ${{ jobs.call-workflow-calver.outputs.VERSION }} # 传递CalVer版本作为输入
3. 让第二个可重用工作流(called-workflow2.yaml)接收并使用输入
被调用工作流2需要先定义inputs字段,声明要接收的参数,之后就能在步骤里直接使用:
# called-workflow2.yaml name: Called Workflow 2 on: workflow_call: inputs: image_version: type: string required: true # 设为true确保必须传值,也可根据需求改为false jobs: echo-version: runs-on: ubuntu-latest steps: - name: Echo Image Version run: | echo "当前使用的镜像版本: ${{ inputs.image_version }}"
后续第三个部署工作流的处理逻辑
第三个负责部署的可重用工作流,同样按照这个模式来:
- 在主调用工作流里添加第三个job,依赖
call-workflow-echo(或者直接依赖call-workflow-calver,只要确保顺序正确) - 把
jobs.call-workflow-calver.outputs.VERSION作为输入传递给第三个工作流 - 第三个工作流定义对应的
inputs,在部署步骤中使用这个版本号
核心要点总结
- 被调用工作流必须在job级别定义
outputs,才能把内部步骤的输出暴露给外部 - 主工作流通过
jobs.<被调用job名称>.outputs.<输出字段>获取值 - 接收值的被调用工作流必须通过
workflow_call.inputs声明要接收的参数 - 用
needs字段确保job的执行顺序,避免值还没生成就被调用
内容的提问来源于stack exchange,提问作者KrisM4c
相关产品推荐
相关产品推荐

