LoginSignup
1
1

More than 5 years have passed since last update.

GitLabCIでRails.crendentials.digができない

Posted at

はじめに

GitLabのCI機能を使ってrspecを動かしたら、なぜかテストが落ちるという現象に見舞われました。

現象と対処法について書きたいと思います。

現象

gitlab-ci.ymlに以下を記載して、GitLabにpushするとrspecが実行されるのだが、実行されたrspecのテストが17個ぐらい落ちる。

.gitlab-ci.yml
rspec:
  stage: test
  script:
    - apt-get update -qq && apt-get install -y mysql-server mysql-client default-libmysqlclient-dev
    - service mysql start
    - echo "CREATE USER 'user'@'%' IDENTIFIED BY '$PASS';" | mysql -u root
    - echo "GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';" | mysql -u root
    - rake db:create db:migrate db:seed RAILS_ENV=test
    - rspec
  artifacts:
    paths:
      - coverage
    expire_in: 1 week

ローカルでrspecを実行するとちゃんと通るのだが。

原因

色々と原因を調査してみると、以下の部分がnilになっていてテストが落ちていた。

Rails.application.credentials.dig(:develop, :aws)

なぜかcredentials.digができていないことが原因だった。

そして、なぜcredentials.digができていなかったのかは、config/master.keyが.gitignoreに入っていてpushされていなかったから。

master.keyはcredentials.yml.encの内容を暗号化・復号化するための鍵。リポジトリに入らないように配慮されている。

対処法

master.keyをscriptの中に記載すればできた。
scriptの部分に以下を記載した。

.gitlab-ci.yml
- echo "config/master.keyの中身" > config/master.key

ハードコーディングはよろしくないので、環境変数を設定して、以下のように記載する。

.gitlab-ci.yml
- echo "$MASTER_KEY" > config/master.key

環境変数はGitLabのSetting→CI/CD→Environment variablesから設定できる。

おわりに

ymlを記載するだけでテストなどを実行してくれて非常に便利な半面、結構予想外なことが起こったりします。

まだまだ、CI/CDを実装するには壁が多そうです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1