使用GitHub Actions部署Google Cloud Run时认证失败:密钥反序列化错误
解决GitHub Actions中gcloud认证失败问题
问题根源
直接用echo输出GitHub Secrets中的JSON内容到文件时,Bash会解析JSON里的转义字符(比如换行符\n),导致生成的credentials.txt格式不符合标准服务账号JSON要求——尤其是private_key字段的换行结构被破坏,最终引发密钥反序列化错误。
解决方法
方法1:用printf替代echo写入文件
修改ci-cd.yml中的create credentials步骤,printf会原样保留JSON的原始格式,不会解析转义字符:
- name: create credentials working-directory: backend run: |- printf "%s" '${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}' > credentials.txt
方法2:使用官方setup-gcloud Action(更推荐)
直接借助Google官方Action完成凭据配置,无需手动创建文件,步骤更可靠:
jobs: build-deploy: runs-on: ubuntu-latest steps: - name: Code Checkout uses: actions/checkout@v4 - name: Set up Cloud SDK uses: google-github-actions/setup-gcloud@v2 with: service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} project_id: your-project-id # 替换为你的GCP项目ID export_default_credentials: true
配置完成后,后续直接执行gcloud命令即可,无需手动运行gcloud auth login。
调试验证(可选)
若使用方法1,可临时添加步骤检查生成的凭据文件格式(调试完成后建议删除,避免敏感信息泄露):
- name: Verify credentials file working-directory: backend run: cat credentials.txt
内容的提问来源于stack exchange,提问作者Cường Nguyễn Mạnh
相关产品推荐
相关产品推荐

