跨仓库复用GitHub Action时输出值无法传递的问题
跨仓库调用复用GitHub Action无法获取输出值的问题解决
问题描述
我在仓库A中定义了如下可复用复合GitHub Action(路径:.github/actions/tests/action.yml):
# .github/actions/tests/action.yml name: "" description: "Runs Docker tests" inputs: go-version: description: "Version of Go to set up" required: true outputs: test_status: description: "The result of the tests: success or failure" runs: using: "composite" steps: - uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v3 with: go-version: ${{ inputs.go-version }} - name: Run tests id: run_tests run: | set +e output=$(go test -v ./... -tags=run_check) set -e echo $output if echo "$output" | grep -q "FAIL"; then echo "test_status=failure" >> $GITHUB_OUTPUT exit 1 else echo "test_status=success" >> $GITHUB_OUTPUT fi working-directory: test shell: bash
在仓库B的工作流中调用该Action:
- name: Run post build tests id: post_buid_tests uses: <owner>/<repo>/.github/actions/tests@main with: go-version: '1.23'
但尝试访问输出值时,steps.post_buid_tests.outputs.test_status返回空值:
- name: Post Node image if: ${{ steps.post_buid_tests.outputs.test_status == 'success' }} run: | echo "Test Status: Successful"
测试发现使用GITHUB_ENV传递变量可正常工作,疑问:是否GitHub Actions无法跨仓库共享输出变量?
问题原因
这不是跨仓库调用的限制,而是复合Action的输出配置缺失了关键绑定步骤。
复合Action中,步骤内通过echo "key=value" >> $GITHUB_OUTPUT设置的是步骤级输出,不会自动成为Action的全局输出。要让步骤输出暴露给调用方,必须在Action的outputs字段中显式关联对应的步骤输出。
解决方案
修改仓库A中复用Action的outputs部分,添加value字段绑定步骤run_tests的输出:
outputs: test_status: description: "The result of the tests: success or failure" value: ${{ steps.run_tests.outputs.test_status }}
补充说明
- 这个规则适用于所有复合Action,无论调用方是同仓库还是跨仓库,只要正确配置输出绑定,就能正常获取输出值。
GITHUB_ENV是设置环境变量,环境变量会自动传递到后续步骤(包括跨仓库调用的上下文),所以能生效,但输出变量需要显式绑定才能被外部工作流获取。- 注意:如果测试失败时执行
exit 1,会导致整个Action步骤失败,此时后续依赖该Action成功的步骤会被跳过;若需要即使失败也能获取输出值,可以去掉exit 1,或者给步骤添加continue-on-error: true配置。
内容的提问来源于stack exchange,提问作者aparna_shelar
相关产品推荐
相关产品推荐

