GitHub Actions矩阵元素无法读取问题求助
解决GitHub Actions矩阵跨Job传递问题
核心原因
GitHub Actions的matrix上下文是在工作流初始化阶段就确定的,无法直接通过artifact传递已构建的矩阵给后续Job。后续Job要使用动态生成的矩阵,得通过jobs.<job-id>.outputs结合fromJSON来动态生成,而非直接读取artifact里的矩阵内容。
具体解决步骤
1. 第一个Job:生成矩阵并输出为JSON字符串
不要只把矩阵存为artifact,还要将矩阵内容转为JSON字符串作为Job的output输出(Job输出仅支持字符串格式)。示例代码:
jobs: build-matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: 生成矩阵数据 id: set-matrix run: | # 替换为你实际构建矩阵的逻辑,比如从仓库内容生成 MATRIX='{"business_unit": ["finance", "engineering", "operations"]}' echo "matrix=$MATRIX" >> $GITHUB_OUTPUT - name: 保存矩阵到Artifact(可选,用于调试) uses: actions/upload-artifact@v4 with: name: matrix-file path: <<你的矩阵文件路径>>
2. 第二个Job:通过Job输出动态生成矩阵
依赖第一个Job,用fromJSON解析输出的JSON字符串生成矩阵,即可正常引用matrix.business_unit等元素:
process-matrix: needs: build-matrix runs-on: ubuntu-latest strategy: matrix: ${{ fromJSON(needs.build-matrix.outputs.matrix) }} steps: - name: 打印当前矩阵条目 run: | echo "当前处理的业务单元:${{ matrix.business_unit }}"
3. 矩阵过大时的替代方案(从Artifact读取)
如果矩阵内容超出Job输出的大小限制,可先下载Artifact读取文件内容,再逐个处理条目。示例代码:
process-from-artifact: needs: build-matrix runs-on: ubuntu-latest steps: - name: 下载矩阵Artifact uses: actions/download-artifact@v4 with: name: matrix-file - name: 读取矩阵并处理单个条目 run: | # 读取JSON格式的矩阵文件 MATRIX=$(cat matrix.json) # 提取第一个业务单元条目(可根据需求调整索引或筛选逻辑) BUSINESS_UNIT=$(echo "$MATRIX" | jq -r '.business_unit[0]') echo "处理单个条目:$BUSINESS_UNIT" # 此处添加更新Cloud Custodian yaml文件的业务逻辑
关键提示
- 不要尝试在第二个Job的
strategy.matrix中直接引用Artifact内容,因为strategy.matrix在Job启动前就已解析,此时Artifact还未下载。 - Job输出字符串有默认1MB的长度限制,矩阵过大时建议拆分矩阵或采用Artifact读取后逐个处理的方式。
内容的提问来源于stack exchange,提问作者Mr.WaynesWorld
相关产品推荐
相关产品推荐

