1

我在 gitlab ci 工作中遇到了 git secret 的问题。

我做了什么:

  1. 初始化,添加用户,添加文件,使用 git secret 隐藏它们
  2. 创建一个我想显示文件的工作:
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 -
    - apt-get update && apt-get install -y git-secret
  script:
    - echo $GPG_PRIVATE_KEY | tr ',' '\n' > ./pkey.gpg
    - export GPG_TTY=$(tty)
    - gpg --batch --import ./pkey.gpg
    - git secret reveal -p ${GPG_PASSPHRASE}

结果日志:

...
$ gpg --batch --import ./pkey.gpg
gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key SOMEKEY: public key "Email Name <ci@email.com>" imported
gpg: key SOMEKEY: secret key imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
$ git secret reveal -p ${GPG_PASSPHRASE}
gpg: [don't know]: partial length invalid for packet type 20
git-secret: abort: problem decrypting file with gpg: exit code 2: /path/to/decrypted/file

我不明白问题出在哪里。什么意思packet type 20?和什么长度?在当地,它显示得很好。命令git secret whoknows显示 ci env 上的电子邮件可以解密。密码短语检查并传递给作业。

4

2 回答 2

1

对我来说,问题是加密机(v2.3)和解密端(v2.2)之间的 GnuPG 版本不同。

在我将它降级到 v2.2 之后(由于 Debian 上还没有 v2.3),问题就消失了。

于 2021-12-20T16:32:32.533 回答
0

这是密钥格式的常见问题。

由于您使用的是 GitLab CI,因此您应该利用 CI/CD 变量中的文件类型,而不是将 GPG 密钥的值存储为变量类型。

首先,忘记用管道在一条线上生成装甲| tr '\n' ','并获得适当的多线装甲。

其次,将其添加到您的 GitLab CI 变量中,类型为“文件”,在末尾添加一个空行,然后将其删除(这看起来很愚蠢,但会让您头疼,因为直接从 shell 复制到GitLab 中的文本框)。

在此处输入图像描述

第三,直接导入钥匙串中的文件:

gpg --batch --import $GPG_PRIVATE_KEY
于 2021-11-02T11:16:34.753 回答