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

GitHub Actions中GCP服务账号Secret解析失败推GCR报错排查

问题诱因

报错Unable to parse json key的核心原因是传入镜像推送动作的GCP服务账号密钥不是合法JSON格式,结合你的操作场景,基本可以排除服务账号权限、密钥本身有效性的问题——毕竟本地已经验证过密钥可以正常推送镜像,故障基本来自以下几个配置失误:

  • 配置GitHub仓库SecretGCR_SECRET时,复制的密钥内容被污染:比如从终端输出复制密钥时混入了shell提示符、折行乱码、首尾多余的空格/引号/转义符,或是漏选了JSON首尾的大括号,导致动作写入gcloud认证文件的内容结构损坏,无法被解析。
  • 误对密钥做了额外编码:不少用户会习惯把敏感内容做base64编码后存入Secret,但你使用的v4版本推送动作默认会把gcloud_service_key传入的内容直接作为原始JSON写入认证文件,传入编码后的内容必然会触发JSON解析失败。
  • 工作流语法错误引发连带异常:你当前配置里project_id: $STAGING_GCR_PROJECT的写法不符合GitHub Actions的变量引用规范,变量不会被正常替换,可能触发动作内部的逻辑异常。
修复方案

按以下顺序操作即可解决问题:

  • 重新配置仓库Secret:本地用文本编辑器打开验证可用的myfile.json,全选复制从开头{到结尾}的全部原始内容,不要做任何修改、不要额外加引号/转义/编码,直接粘贴覆盖GitHub中现有的GCR_SECRET即可。
  • 修正变量引用语法:根据STAGING_GCR_PROJECT的存储位置修改配置写法:
    • 如果值定义在工作流的env块中,改为project_id: ${{ env.STAGING_GCR_PROJECT }}
    • 如果值存在仓库/组织级的Variables配置中,改为project_id: ${{ vars.STAGING_GCR_PROJECT }}
  • 可选调试步骤:如果修改后仍报错,可以在调用推送动作前加临时校验步骤(调试完成后记得删除),直接验证传入的密钥格式是否合法:
- name: Check service key validity
  run: |
    cat <<EOF > temp_key.json
    ${{ secrets.GCR_SECRET }}
    EOF
    python3 -c "import json; json.load(open('temp_key.json')); print('Key format check passed')"
    rm -f temp_key.json

如果这一步执行失败,说明你存入Secret的密钥内容本身就不是合法JSON,重新复制完整正确的原始密钥内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:33:19