如何从另一个Job中打印GitHub Actions的Matrix值?
解决GitHub Actions矩阵值传递并打印全部值的问题
你的问题出在两个地方:一是job1的outputs配置位置错误,二是没有利用矩阵job输出的数组特性收集所有值。以下是修正后的方案:
第一步:修正job1的outputs配置
将outputs放在job的顶级层级(与strategy同级),确保每个矩阵实例都能输出自己的values:
job1: runs-on: ubuntu-latest env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} strategy: matrix: values: [val1, val2, val3, val4] # 注意:outputs是job的顶级属性,不要放在strategy内 outputs: values: ${{ steps.values_id.outputs.values_array }} steps: - uses: actions/checkout@v4 # 其他步骤... - name: Export matrix value id: values_id run: echo "values_array=${{ matrix.values }}" >> "$GITHUB_OUTPUT"
第二步:在job2中处理并打印所有值
当job1是矩阵运行时,needs.job1.outputs.values会返回一个包含所有矩阵实例输出值的数组,我们可以用GitHub Actions内置函数或shell命令处理成需要的格式:
方式1:打印逗号分隔的形式
使用join函数将数组拼接为逗号加空格分隔的字符串:
job2: needs: [job1] runs-on: ubuntu-latest env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 - name: Print comma-separated values run: | echo "${{ join(needs.job1.outputs.values, ', ') }}"
执行后输出:
val1, val2, val3, val4
方式2:打印换行分隔的形式
用join函数指定换行符作为分隔符:
job2: needs: [job1] runs-on: ubuntu-latest env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 - name: Print newline-separated values run: | echo "${{ join(needs.job1.outputs.values, '\n') }}"
执行后输出:
val1 val2 val3 val4
方式3:用shell循环遍历打印(适合复杂处理)
如果需要对每个值做额外处理,可结合toJSON确保数组正确传递给shell:
job2: needs: [job1] runs-on: ubuntu-latest env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 - name: Print values via loop run: | values=(${{ toJSON(needs.job1.outputs.values) }}) for val in "${values[@]}"; do echo "$val" done
原配置只打印最后一个值的原因
- outputs位置错误:你将outputs写在了
strategy内部,不符合GitHub Actions语法规范,导致输出未正确关联到每个矩阵实例。 - 未处理数组输出:矩阵job的输出本身是数组,原代码未利用数组特性,最终只获取到了最后一个实例的输出。
内容的提问来源于stack exchange,提问作者Bibus
相关产品推荐
相关产品推荐

