繁体   English   中英

gitlab-runner exec docker-注入gpg密钥

[英]gitlab-runner exec docker - inject gpg key

我需要使用exec命令和gitlab-runner在本地运行gitlab-runner

docker executor将项目克隆到容器中,所以我从空白开始。 为了运行测试,我需要解密某些凭证文件。 通常,这是在开发人员机器上使用开发人员专用gpg密钥完成的。 但是现在我们在一个容器中,我找不到将开发人员gpg密钥注入到测试容器中的方法。

通常,将私钥作为环境变量传递是有意义的,但是gitlab-runner exec命令不支持environment功能。

如果gitlab-runner仅将项目文件复制到容器中,而不是对项目进行新的克隆,那将容易得多。 这样,开发人员可以解密主机上的凭据,一切都很好。

我在这里有什么选择?

将环境变量传递到测试容器的唯一选择是对gitlab-runner使用--env参数。

首先,我们需要将私钥存储在本地计算机上的环境变量中。 我为此使用了direnv ,但它也可以手动工作:

export GPG_PRIVATE_KEY="$(gpg --export-secret-keys -a <KEY ID>)"

然后我们可以像这样运行gitlab-runner

gitlab-runner exec docker test \
  --env GPG_PRIVATE_KEY="$GPG_PRIVATE_KEY" \
  --env GPG_PASSPHRASE="$GPG_PASSPHRASE"

请注意,我还在环境变量中传递了密码短语,因为我需要在容器内部使用它来解密我的数据。

现在,我可以将密钥导入docker容器中。 我的.gitlab-ci.yml的顶部看起来像这样:

image: quay.io/mhart/alpine-node:8

before_script:
  - apk add --no-cache gnupg
  - echo "$GPG_PRIVATE_KEY" | gpg --batch --import --pinentry-mode loopback --no-tty

完成后,现在我们可以使用容器内的键执行我们想要的操作了。

当我尝试解密数据时,我也遇到了一些问题。 本指南非常有用,可以解决我的问题。

我很难想象。为什么需要用exec调用gitlab-runner,但为什么不能呢?

   exec gitlab-runner sh
             export GPG_KEY=...
             ....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM