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

GitHub Action中base64编码JSON服务账号密钥传入失败问题

问题描述

我的服务账号(SA)密钥以JSON格式存储,在使用要求传入base64编码格式SA密钥的GitHub Action时,执行如下配置出现失败:

- name: base64 encode the staging gcr sa
      id: base64-staging-gcr
      shell: bash
      run:
        echo "::set-output name=STAGING_GCR_SA_BASE64::$(echo '${{ secrets.STAGING_GCR_SA }}' | python -m base64 -e)"

    - name: build and push to staging gcr
      id: stg_img_build
      uses: RafikFarhad/push-to-gcr-github-action@v4
      with:
        gcloud_service_key: ${{ steps.base64-staging-gcr.outputs.STAGING_GCR_SA_BASE64 }}
        registry: gcr.io
        project_id: $STAGING_GCR_PROJECT
        image_name: ${{ github.event.inputs.image_name }}
        image_tag:  ${{ github.event.inputs.image_tag }}

运行抛出的错误信息如下:

Error response from daemon: Get "https://gcr.io/v2/": unknown: Unable to parse json key.
错误原因

base64编码环节确实存在问题,共两处核心错误:

  • 使用echo输出密钥内容时,默认会在字符串末尾追加换行符,导致编码后的内容尾部带冗余字符,后续Action解码得到的JSON格式非法,无法被解析。
  • 调用Python的base64模块编码时,默认会在输出长度超过76个字符时插入换行符,进一步破坏了编码结果的连续性,解码后得到的内容不是合法JSON。

除此之外配置还有两个额外问题:

  • ::set-output是GitHub Action已经废弃的输出设置语法,后续版本会完全移除支持。
  • project_id字段的变量写法错误,with块不是shell执行环境,直接写$STAGING_GCR_PROJECT无法读取到变量值。
修复方案

将base64编码步骤替换为如下内容:

- name: base64 encode the staging gcr sa
      id: base64-staging-gcr
      shell: bash
      run:
        echo "STAGING_GCR_SA_BASE64=$(echo -n '${{ secrets.STAGING_GCR_SA }}' | base64 -w 0)" >> $GITHUB_OUTPUT

修正点说明:

  1. 给echo加-n参数,禁止在输出内容末尾自动追加换行符
  2. 直接使用系统自带的base64命令,加-w 0参数关闭自动折行,输出连续无多余换行的合法base64字符串
  3. 使用官方推荐的$GITHUB_OUTPUT文件写入方式设置步骤输出,兼容当前和后续版本的GitHub Action运行器

同时修正project_id的变量引用:如果GCP项目ID存在仓库变量中,写为${{ vars.STAGING_GCR_PROJECT }};如果存在密钥中,写为${{ secrets.STAGING_GCR_PROJECT }}即可。


内容的提问来源于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 21:24:20