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
相关产品推荐
相关产品推荐

