GitHub Actions中如何将字符串数组转为矩阵?解析错误求解决
解决GitHub Actions Matrix解析JSON数组的错误
错误原因
你遇到的问题根源是全局环境变量VERSIONS的JSON格式不合法:原配置里的[9.0.0, 11.0.0]没有给版本号加双引号,JSON解析器会把9.0.0当作浮点数尝试解析,但GitHub Actions的fromJSON在处理这种格式时会触发类型错误——因为版本号本质是字符串,而非数字,必须用双引号包裹才能被正确识别为字符串数组。
修正方案
步骤1:修正全局环境变量格式
将VERSIONS改为合法的JSON字符串数组,给每个版本号添加双引号:
env: VERSIONS: '["9.0.0", "11.0.0"]'
步骤2:确保矩阵输出传递正确
你的prepare-matrix作业逻辑本身没问题,修改后的完整工作流配置如下:
env: VERSIONS: '["9.0.0", "11.0.0"]' jobs: prepare-matrix: name: Prepare Matrix Output runs-on: ubuntu-latest outputs: all_versions: ${{ steps.step1.outputs.matrix }} steps: - name: Create Matrix Variable id: step1 run: echo "matrix=${{ env.VERSIONS }}" >> $GITHUB_OUTPUT deploy-gke: name: Deploy to GKE runs-on: ubuntu-latest needs: [prepare-matrix] strategy: max-parallel: 2 matrix: version: ${{ fromJSON(needs.prepare-matrix.outputs.all_versions) }} steps: # 你的部署步骤示例 - name: Print target version run: echo "Deploying version ${{ matrix.version }}"
额外防错方案
如果担心手动编写JSON出错,可以在prepare-matrix作业中用jq动态生成合法的JSON数组,彻底避免格式问题:
jobs: prepare-matrix: name: Prepare Matrix Output runs-on: ubuntu-latest outputs: all_versions: ${{ steps.step1.outputs.matrix }} steps: - name: Create Matrix Variable id: step1 run: | # 用jq自动生成标准JSON字符串数组 VERSIONS_ARRAY=$(jq -n '$ARGS.positional' --args 9.0.0 11.0.0) echo "matrix=$VERSIONS_ARRAY" >> $GITHUB_OUTPUT
这种方式无需预先在全局env定义数组,直接通过命令行参数传递版本号,由jq处理JSON格式,可靠性更高。
内容的提问来源于stack exchange,提问作者hsid
相关产品推荐
相关产品推荐

