Rails Gitlab.com CI 中的主密钥

Rails Master Key in Gitlab.com CI

我正在尝试为我的私人项目之一设置 gitlab.com 持续集成(CI)。但是 rails db:migrate 失败并出现以下错误:

ActiveSupport::EncryptedFile::MissingKeyError: Missing encryption key to decrypt file with. Ask your team for your master key and write it to /builds/shubh-muhurat/Backend/config/master.key or put it in the ENV['RAILS_MASTER_KEY']

master key 不应该在存储库中,但是如果我使用 .gitlab-ci.yml 设置 RAILS_MASTER_KEY 我必须将主密钥提交到存储库。

那么有没有更好的放置主密钥的方法呢

PS: 我正在使用 gitlab.com CI.

版本: Rails5.2.0.beta2

我通过将主密钥添加到项目秘密变量然后在 before_script 阶段注入它来解决这个问题:

- echo "$MASTER_KEY" > config/master.key

为了找到声明变量的最简单方法做了一些研究后,我发现了 GitLab 中的 Variables 部分。 Variables 部分位于存储库 CI/CD 设置下。还有一个选项可以让您的变量受到保护。

我有同样的问题,并通过在构建图像时注入临时虚拟 master.key 和 credentials.yml.enc 的变通方法解决了这个问题。这允许我的 CI 使用虚拟 master.key 而不会泄露真正的密钥。

Dockerfile 中的解决方法

# Precompile assets
# We use dummy master.key and credentials.yml.enc to workaround the fact that
# assets:precompile needs them but we don't want the real master.key to be built
# into the container. We will inject RAILS_MASTER_KEY env var when starting the
# container.

RUN if [[ "$RAILS_ENV" == "production" ]]; then \
      mv config/credentials.yml.enc config/credentials.yml.enc.backup; \
      mv config/credentials.yml.enc.sample config/credentials.yml.enc; \
      mv config/master.key.sample config/master.key; \
      bundle exec rails assets:precompile; \
      mv config/credentials.yml.enc.backup config/credentials.yml.enc; \
      rm config/master.key; \
    fi