如何直接将GitHub复合动作输出转为作业输出?无需额外Run步骤
可以省略Run步骤直接将复合动作输出转为作业输出
当然可以,完全不需要额外的Run步骤来中转,只要在复合动作定义和工作流调用时做对应配置,就能直接把复合动作的输出转为调用步骤的输出,进而设置成作业输出。
步骤1:在复合动作中声明输出
首先要在复合动作的action.yml里,把内部步骤的输出暴露为动作本身的输出。比如:
# ./actions/my-compound-action/action.yml name: '我的复合动作' description: '带输出的复合动作示例' outputs: action-result: description: '复合动作生成的结果' value: ${{ steps.gen-result.outputs.result }} # 关联内部步骤的输出 runs: using: 'composite' steps: - name: 生成结果 id: gen-result run: echo "result=hello-from-compound-action" >> $GITHUB_OUTPUT shell: bash
这里的核心是outputs字段:通过value把复合动作内部步骤的输出(steps.gen-result.outputs.result)映射为动作对外的输出(action-result)。
步骤2:在工作流中直接引用并设置作业输出
调用复合动作时,给步骤设置id,然后直接通过steps.<步骤ID>.outputs.<动作输出名>获取值,赋值给作业输出即可,不需要额外Run步骤:
jobs: upstream-job: runs-on: ubuntu-latest outputs: job-output: ${{ steps.call-compound.outputs.action-result }} # 直接引用动作输出 steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 调用复合动作 id: call-compound uses: ./actions/my-compound-action # 下游作业可以直接使用上游作业的输出 downstream-job: runs-on: ubuntu-latest needs: upstream-job steps: - name: 打印上游作业输出 run: echo "上游作业传递的结果:${{ needs.upstream-job.outputs.job-output }}" shell: bash
关键原理
复合动作本身支持对外暴露输出,这些输出会直接成为调用该动作的步骤的输出属性。所以你可以在作业的outputs里直接引用,或者在当前作业的后续步骤中使用,完全跳过中间的Run中转步骤。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

