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

GitHub Actions:跨Job传递动态JSON数组失败问题排查

解决GitHub Actions Job间传递版本数组作为Matrix参数的问题

问题根源

你遇到的Unexpected type of value '$VERSION_JSON', expected type: Sequence错误,本质是从setup Job传递到changes Job的变量默认是字符串类型,而matrix策略需要的是序列(数组)类型,直接引用字符串会导致类型不匹配。

分步解决方案

1. 在setup Job中正确输出JSON格式的版本数组

确保用GITHUB_OUTPUT输出严格格式的JSON(避免换行、格式错误),示例代码:

jobs:
  setup:
    runs-on: ubuntu-latest
    # 声明要传递给其他Job的输出变量
    outputs:
      version_json: ${{ steps.fetch_versions.outputs.version_json }}
    steps:
      - name: 从Solana接口获取版本数组
        id: fetch_versions
        run: |
          # 替换为你实际调用Solana接口的逻辑,这里用模拟值示例
          VERSIONS=$(curl -s https://api.solana.com/versions | jq -c '.')
          # 输出紧凑格式的JSON到GITHUB_OUTPUT
          echo "version_json=$VERSIONS" >> $GITHUB_OUTPUT
  • 用jq -c确保输出的是紧凑JSON(无换行),避免解析失败
  • 必须通过steps.<step-id>.outputs和Job的outputs层级声明变量,否则其他Job无法读取

2. 在changes Job中用fromJSON解析字符串为数组

在matrix配置中,用fromJSON()把传递过来的字符串解析成序列类型,示例:

changes:
  needs: setup
  runs-on: ubuntu-latest
  strategy:
    matrix:
      # 解析JSON字符串为数组,作为matrix的参数
      version: ${{ fromJSON(needs.setup.outputs.version_json) }}
  steps:
    - name: 调试当前版本
      run: echo "正在构建版本: ${{ matrix.version }}"

常见排查点

  • 检查setup Job输出的JSON格式:在setup Job末尾加debug步骤,确认输出的JSON是否正确:
    echo "输出的版本JSON: $VERSIONS"
    
  • 避免使用已废弃的set-output命令,统一用GITHUB_OUTPUT写入变量
  • 确保JSON字符串没有语法错误:比如字符串必须用双引号,数组格式正确,无多余逗号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:09:25