如何在主工作流中获取可重用工作流的输出变量
GitHub Actions可重用工作流输出传递问题解决方法
问题描述
主工作流执行流程为mainjob1 → 可重用工作流reusable_workflow_job → mainjob2。可重用工作流通过PowerShell脚本生成app_name=myapp1并写入GITHUB_OUTPUT,内部能正常打印该值,但主工作流的mainjob2无法通过${{ needs.reusuable_workflow_job.outputs.app_name }}获取到值。
解决方案
要让主工作流拿到可重用工作流的输出,需要在可重用工作流中显式声明输出映射关系,具体修改如下:
步骤1:修改可重用工作流,添加输出映射
在可重用工作流中需要完成两层映射:
- 在
workflow_call节点下定义工作流级别的输出 - 在执行任务的job中,将步骤的输出映射为job输出,再关联到工作流输出
修改后的可重用工作流代码:
name: Read XML on: workflow_call: inputs: xml_Path: required: true default: '\\remotehost5\$D\Logs\test.xml' # 新增:定义工作流对外暴露的输出 outputs: app_name: description: "从XML提取的应用名称" value: ${{ jobs.Extract-keys.outputs.app_name }} jobs: Extract-keys: runs-on: "mylocal_windows" # 新增:将步骤输出映射为job输出 outputs: app_name: ${{ steps.run-scriptsx.outputs.app_name }} steps: - name: Checkout reusable repo uses: actions/checkout@v3 with: repository: knowyrtech/betech ref: mm365 path: "${{ github.workspace }}/betech" token: ${{ secrets.my_automated_token }} - name: Call powershell id: run-scriptsx run: | set-location "${{ github.workspace}}\betech\scripts" $returnvalue=& "./getXMLkey-value.ps1" echo "$returnvalue" echo "$returnvalue" >> $env:GITHUB_OUTPUT - name: Inside reusable workflow run: | echo "App Name in reusable workflow: ${{ steps.run-scriptsx.outputs.app_name }}"
步骤2:主工作流无需修改
保持原主工作流代码不变,mainjob2中的echo "App name in mainjob2: ${{ needs.reusuable_workflow_job.outputs.app_name }}"即可正常输出myapp1。
原因说明
GitHub Actions中,可重用工作流的输出不会自动向上传递。必须通过workflow_call.outputs声明工作流对外暴露的输出,并通过job的outputs将内部步骤的输出映射到工作流输出,主工作流才能通过needs引用这些值。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

