本地环境下Github Actions添加JSON作为Secrets报错求助
解决Github Actions本地测试(act)中Google Drive下载的JSON解码错误
问题核心
你遇到的JSONDecodeError本质是传入的服务账号JSON格式不正确,或act加载secret时出现格式问题,导致程序读取到空值或无效JSON字符串。
分步解决方案
1. 修正act的secret文件格式
act的my.secrets文件要求键值对不能有空格,你当前写法SERVICE_ACCOUNT_AUTH_JSON = [my_config_json]中等号两边的空格会被act解析为值的一部分,导致JSON开头存在无效空格,直接触发解码错误。
正确格式:
SERVICE_ACCOUNT_AUTH_JSON={"type":"service_account","project_id":"你的项目ID",...}
注意:
- 等号前后无空格
- 直接填入未转义的纯文本JSON(无需base64编码,也不要用引号包裹整个JSON)
2. 处理JSON中的特殊字符
如果原始服务账号JSON包含换行,需要先压缩为单行:
- 删除JSON里所有换行符
- 确保所有引号都是英文双引号,无语法错误(原始JSON本身的双引号不需要额外转义)
3. 验证secret是否正确加载
可在workflow中临时添加调试步骤(仅本地测试用,勿提交到仓库),确认JSON是否正确传递:
- name: Debug secret content run: echo ${{ secrets.SERVICE_ACCOUNT_AUTH_JSON }}
执行act后,查看该步骤输出,核对是否与原始服务账号JSON一致。
4. 确认action参数配置
你的workflow配置逻辑正确,可再次核对参数名与实际值:
- name: Download Google Docs from Google Drive uses: k0staa/download-gdrive-file-action@v1 with: service-account-auth-json: ${{ secrets.SERVICE_ACCOUNT_AUTH_JSON }} download-file-name: 你的目标文件名 # 替换为实际文件名 export-media-type: text/plain download-to: 你的目标路径 # 替换为实际路径
额外注意事项
- 切勿将服务账号JSON提交到版本控制系统,本地测试后及时加密或删除
my.secrets文件 - 确保服务账号邮箱已被授予Google Drive目标文件的访问权限(需手动共享文件给该邮箱)
内容的提问来源于stack exchange,提问作者박상우
相关产品推荐
相关产品推荐

