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

如何修复GitHub Workflow发布(GPG)中的‘base64: invalid input’错误?

问题描述

此前多次通过GitHub Workflow向Nexus发布代码,近期运行失败。因3年多未使用,推测原GPG密钥过期,遂生成默认长度的新RSA密钥,发布至keyserver.ubuntu.com,并将密钥粘贴到GitHub仓库的PGP_SECRET秘钥变量中,但Workflow运行时出现以下错误:

Running ci-release.
  branch=refs/tags/v1.2.2
gpg (GnuPG) 2.2.27
java.lang.RuntimeException: base64: invalid input
...
[error] base64: invalid input
[error] Use 'last' for the full log.

Error: Process completed with exit code 1.

本地可正常使用该密钥加解密,想了解错误原因及修复方法,是否是密钥未被GitHub识别?

可能的原因及修复方法

1. PGP_SECRET变量格式错误

GitHub Secrets中的PGP_SECRET需要是私钥的base64编码值,而非直接粘贴带-----BEGIN/END PGP PRIVATE KEY BLOCK-----的ASCII armored文本。直接粘贴原始密钥文本会导致Workflow解析时base64解码失败。

修复步骤:

  • 本地导出密钥并转为base64编码(无换行格式):
    gpg --export-secret-keys --armor 你的密钥ID | base64 -w 0
    
  • 将命令输出的完整结果复制到GitHub仓库的PGP_SECRET变量中,替换原有内容。

2. 粘贴时引入多余字符

手动复制密钥时,可能不小心带入空格、换行符或首尾空白字符,这些都会破坏base64编码的完整性。

修复步骤:

  • 重新用上述命令生成无换行的base64编码值;
  • 在GitHub Secrets中粘贴时,直接全选复制结果,不要手动添加任何额外字符或换行。

3. Workflow密钥处理逻辑有误

如果Workflow脚本对PGP_SECRET的解码逻辑错误(比如未正确处理base64解码),也会触发该错误。

修复步骤:

  • 检查Workflow中导入GPG密钥的代码,确保是先解码再导入:
    示例GitHub Actions代码:
    - name: 导入GPG密钥
      run: |
        echo "${{ secrets.PGP_SECRET }}" | base64 -d | gpg --import --batch
    
    确认使用base64 -d完成解码,再通过管道传递给gpg --import。

4. 密钥导出不完整(低概率)

虽然本地能正常使用,但如果导出私钥时未包含完整信息,也可能导致解码后无法被识别。

修复步骤:

  • 本地验证密钥的base64转换完整性:
    # 导出原始密钥
    gpg --export-secret-keys --armor 你的密钥ID > private-key.asc
    # 转base64再还原
    base64 -w 0 private-key.asc | base64 -d > restored-key.asc
    # 验证还原后的密钥可导入
    gpg --import restored-key.asc
    
    若能正常导入,说明密钥本身无问题,问题集中在GitHub Secrets或Workflow处理环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:17:32