GitHub Actions传递SHA至自定义工作流失败原因排查
问题定位与修复方案
核心问题1:prep Job的Outputs格式错误
你当前的prep Job输出定义写错了YAML格式,导致needs.prep.outputs.sha根本没拿到正确值。原写法会让YAML把sha解析为包含子项的映射,而非直接赋值为short-sha的输出结果。
错误写法:
outputs: sha: ${{ steps.short-sha.outputs.sha }}
正确写法:
outputs: sha: ${{ steps.short-sha.outputs.sha }}
核心问题2:prep Job里的SHA打印步骤无效
你prep中的print SHA步骤用了env.SHA引用自身,属于循环引用,根本打不出真实的SHA值,这也是你误以为引用有效的原因。
修复后的print SHA步骤:
- name: print SHA run: echo $SHA env: SHA: ${{ steps.short-sha.outputs.sha }}
额外优化:调用工作流的依赖可以简化
call-other-workflow Job不需要依赖print-sha,直接依赖prep即可,减少不必要的Job执行环节:
call-other-workflow: name: call-other-workflow needs: [ prep ] uses: ./.github/workflows/other_workflow.yml with: commit-hash: ${{ needs.prep.outputs.sha }}
完整修复后的调用方工作流
name: "call other workflow" on: push jobs: #------------------------------------ prep: name: prep runs-on: ubuntu-latest outputs: sha: ${{ steps.short-sha.outputs.sha }} steps: - name: Checkout uses: actions/checkout@v4.1.1 with: submodules: recursive - name: Short-Sha uses: benjlevesque/short-sha@v3.0 id: short-sha with: length: 8 - name: print SHA run: echo $SHA env: SHA: ${{ steps.short-sha.outputs.sha }} #------------------------------------ print-sha: name: print-sha needs: [ prep ] runs-on: ubuntu-latest steps: - name: print SHA run: echo $SHA env: SHA: ${{ needs.prep.outputs.sha }} #------------------------------------ call-other-workflow: name: call-other-workflow needs: [ prep ] uses: ./.github/workflows/other_workflow.yml with: commit-hash: ${{ needs.prep.outputs.sha }}
修改完成后,被调用的工作流就能正确接收到prep Job输出的SHA值了。
内容的提问来源于stack exchange,提问作者AudioDroid
相关产品推荐
相关产品推荐

