在Gitlab.com CI中使用Rails Master Key

时间:2018-04-03 05:47:32

标签: ruby-on-rails gitlab gitlab-ci secret-key

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

  

ActiveSupport :: EncryptedFile :: MissingKeyError:缺少用于解密文件的加密密钥。向您的团队询问您的主密钥并将其写入/builds/shubh-muhurat/Backend/config/master.key或将其放入ENV [' RAILS_MASTER_KEY']

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

那么有更好的方法来放置主密钥。

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

版本: Rails 5.2.0.beta2

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

在进行了一些研究之后,找到了最简单的声明变量的方法,我在GitLab中找到了Variables部分。 Variables部分位于存储库CI / CD设置下。还可以选择保护变量。

答案 2 :(得分:0)

我也遇到了同样的问题,并通过创建临时假的master.key和凭据.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