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

Gitlab CI执行git secret reveal报gpg packet type 20错误如何解决

报错含义

GPG 中 packet type 20 对应对称加密会话密钥数据包,该报错本质是 CI 环境的 GPG 版本与本地加密时使用的 GPG 版本存在兼容性差异,高版本 GPG 生成的部分加密数据包格式无法被低版本 GPG 正确解析,也可能由私钥信任等级不足、解密时缺失非交互配置触发。

解决方案

1. 对齐本地与CI环境的GPG版本

  • 本地执行gpg --version确认使用的 GPG 大版本(常见为 2.2.x/2.3.x/2.4.x 系列)
  • 在 CI 中安装与本地大版本一致的 GPG,避免 apt 默认拉取的低版本产生兼容问题

2. 修正CI任务配置

原有脚本缺失私钥信任配置、解密非交互配置,修改后的任务参考如下:

git secret:
  stage: init
  before_script:
    - sh -c "echo 'deb https://gitsecret.jfrog.io/artifactory/git-secret-deb git-secret main' >> /etc/apt/sources.list"
    - wget -qO - 'https://gitsecret.jfrog.io/artifactory/api/gpg/key/public' | apt-key add -
    # 请将gnupg2的版本替换为和本地一致的版本号段
    - apt-get update && apt-get install -y --no-install-recommends gnupg2=2.2.* git-secret
  script:
    - echo $GPG_PRIVATE_KEY | tr ',' '\n' > ./pkey.gpg
    - gpg --batch --import ./pkey.gpg
    # 为导入的CI私钥设置最高信任等级
    - echo -e "trust\n5\ny\n" | gpg --batch --command-fd 0 --edit-key ci@email.com
    # 增加--batch参数指定非交互模式运行解密,-f强制覆盖已有文件避免报错
    - git secret reveal -f -p ${GPG_PASSPHRASE} -d "--batch"

3. 校验私钥存储格式

确认导出GPG私钥时使用了gpg --export-secret-keys --armor命令生成ASCII格式私钥,并且在GitLab CI变量中存储时,已将私钥的所有换行符正确替换为逗号,没有遗漏字符、多余转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:06