如何解决如何在 gitlab ci/cd 管道上的 docker build 期间解锁 git-crypt 文件
我有一个使用 git-crypt 加密文件的存储库。我已将密钥导出到文件中。现在我在 gitlab 上使用默认的 docker 镜像构建模板来构建我的镜像。管道工作得很好。我只是不知道如何在构建过程中“解锁”文件,以便图像具有可供使用的明文文件。管道构建如下所示:
docker-build:
# Use the official docker image.
image: docker:latest
stage: build
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
# Default branch leaves tag empty (= latest tag)
# All other branches are tagged with the escaped branch name (commit ref slug)
script:
- |
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
tag=""
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
else
tag=":$CI_COMMIT_REF_SLUG"
echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag"
fi
echo $CI_REGISTRY_IMAGE${tag}
- docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .
- docker push "$CI_REGISTRY_IMAGE${tag}"
# Run this job in a branch where a Dockerfile exists
rules:
- if: $CI_COMMIT_BRANCH
exists:
- Dockerfile
我只是不确定在哪里或何时解锁。它发生在 Dockerfile 中还是在这个构建过程中?我用谷歌搜索过,并认为这是一个常见问题,但到目前为止还没有。
预先感谢您提供的任何帮助或链接。
布拉德
解决方法
我认为没有人回答的原因是因为几乎不可能回答。如何使用跑步者有很多排列。所以我会分享我的解决方案。
我必须意识到的是,运行 docker 映像的操作系统映像中没有安装 git-crypt。所以这是我的第一个任务。
- apk add git-crypt
既然二进制文件在建筑图像中,我需要以某种方式将解锁密钥放入图像中。幸运的是,gitlab 具有您可以在构建中使用的项目变量。但是,他们目前无法上传二进制文件,即解锁密钥。那么该怎么办。好吧,您对它进行了 base64 编码。
base64 binaryfile.key > baseecodeded.key
您现在可以将没有 cr/lf 的文本粘贴到 gitlab 项目变量中,并确保将其设置为 File not text。然后您可以将变量解码回文件并在您的构建中使用它。
- cat "$CRYPT_KEY" | base64 -d > key-file
- git-crypt unlock key-file
最终的 .gitlab-ci.yml 如下。我要做的一件事就是将其更改为跳过创建文件.. 并将解码的变量直接通过管道传输到 git-crypt unlock。
docker-build:
# Use the official docker image.
image: docker:latest
stage: build
tags:
- "docker"
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- apk add git-crypt
- cat "$CRYPT_KEY" | base64 -d > key-file
- git-crypt unlock key-file
script:
- |
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
tag=""
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
fi
- docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .
- docker push "$CI_REGISTRY_IMAGE${tag}"
# Run this job in a branch where a Dockerfile exists
rules:
- if: "$CI_COMMIT_BRANCH =~ /^dev/"
when: never
- if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH"
exists:
- Dockerfile
布拉德
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。