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
相关产品推荐
相关产品推荐

