You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取采用Matrix Strategy的并行作业的全部输出供后续作业使用?

如何获取GitHub Actions并行矩阵作业的所有输出?

针对你提到的场景(第一个矩阵作业并行生成输出,第二个作业依赖并获取所有这些输出),可以通过以下几种方式实现,根据你的具体需求选择:

1. 直接映射对应矩阵任务的输出(适用于第二个作业矩阵与第一个完全匹配)

如果第二个作业的矩阵组合和第一个完全一致,你可以在第一个作业中为每个矩阵任务定义带唯一标识的输出,然后在第二个作业中通过矩阵变量直接获取对应任务的输出。

第一个矩阵作业配置:

jobs:
  generate-outputs:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        arch: [x64, arm64]
    outputs:
      # 用矩阵变量作为输出key的一部分,确保每个任务输出唯一
      result-${{ matrix.os }}-${{ matrix.arch }}: ${{ steps.gen-output.outputs.result }}
    steps:
      - name: Generate task-specific output
        id: gen-output
        run: |
          # 模拟生成对应矩阵组合的输出内容
          echo "result=output_${{ matrix.os }}_${{ matrix.arch }}" >> $GITHUB_OUTPUT

第二个矩阵作业配置:

process-outputs:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        arch: [x64, arm64]
    needs: generate-outputs
    steps:
      - name: Fetch and process corresponding output
        run: |
          echo "Processing output from ${{ matrix.os }}-${{ matrix.arch }}: ${{ needs.generate-outputs.outputs['result-${{ matrix.os }}-${{ matrix.arch }}'] }}"

2. 通过Artifact收集所有输出(适用于需要批量处理所有结果)

如果第二个作业需要一次性获取所有矩阵任务的输出,使用Artifact上传/下载是更可靠的方式(避免作业输出的大小限制)。

第一个矩阵作业配置:

jobs:
  generate-outputs:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        arch: [x64, arm64]
    steps:
      - name: Generate output file
        run: |
          # 将输出写入文件,文件名或内容包含矩阵标识
          echo "output_${{ matrix.os }}_${{ matrix.arch }}" > task_output.txt
      - name: Upload output as artifact
        uses: actions/upload-artifact@v4
        with:
          name: task-output-${{ matrix.os }}-${{ matrix.arch }}
          path: task_output.txt

第二个作业配置(可处理所有输出):

process-all-outputs:
    runs-on: ubuntu-latest
    needs: generate-outputs
    steps:
      - name: Download all task artifacts
        uses: actions/download-artifact@v4
        with:
          path: all-task-outputs
      - name: Batch process all outputs
        run: |
          echo "All matrix task outputs:"
          # 遍历所有下载的输出文件并打印内容
          for output_file in all-task-outputs/*/task_output.txt; do
            cat "$output_file"
          done

3. 遍历矩阵作业的上下文数组(适用于动态获取所有输出)

GitHub Actions中,当作业使用矩阵策略时,needs.<job-name>会返回一个包含所有矩阵任务上下文的数组,你可以遍历这个数组来获取每个任务的输出。

第二个作业配置:

process-all-outputs:
    runs-on: ubuntu-latest
    needs: generate-outputs
    steps:
      - name: Iterate all matrix task outputs
        run: |
          # 使用jq解析needs数组,提取每个任务的输出
          echo '${{ toJSON(needs.generate-outputs) }}' | jq -r '.[] | .outputs.result'

注意事项

  • 作业输出有大小限制(单条输出最大1MB),如果输出内容较大,优先选择Artifact方式。
  • 遍历needs数组时,确保Runner环境安装了jq工具(如Ubuntu默认自带,Windows需额外安装)。

内容的提问来源于stack exchange,提问作者Memphis Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:01:03