Rails5.2 + Travis CI + RSpecのTravis設定メモ

Travis CIにアカウント登録して対象リポジトリに連携(RepositoriesでONボタンをクリック)する

対象リポジトリのルート直下に.travis.ymlファイルを作成して以下設定

  • rvmは省略すると.ruby-versionファイルに記載のものが採用される
  • ローカルの開発環境ではrbenv使っているが、Travis CI環境とあわせてrvmを使う必要はない
language: ruby

services:
  - postgresql

bundler_args: --jobs=3 --retry=3
cache: bundler

before_install:
  # Install latest 1.x and 2.x bundler for Avoid GemNotFoundException error.
  - gem install bundler -v 1.17.3
  - gem install bundler -v 2.0.1

before_script:
  - psql -c 'create database travis_ci_test;' -U postgres
  - cp config/database.yml.travis config/database.yml

script:
  - bundle exec rake db:create
  - bundle exec rake db:migrate
  - bundle exec rspec spec

ファイル記述例 - .travis.yml

Travisの設定画面でRailsのCredentialsを登録する

対象リポジトリの「setting」タブの「Environment Variables」項目から登録できる。

  • Name: RAILS_MASTER_KEY
  • Value: 対象リポジトリの「config/master.key」の値

以上で完了。

エラー関連

bundler 2.xが入っていない といわれるエラー

いくら調べてもよくわからない。bundlerは2.0.1になっているし、Gemfileにバージョン固定記述も試し、.travis.ymlファイルのスクリプトにbundler 2.0.1のインストールも記述してみたが改善されず。

やむをえず、.travis.ymlファイルにbundlerの1.xと2.xをインストールするようにスクリプトを記述することで解決。

エラー内容

3.19s$ bundle install --without development --jobs=3 --path=${BUNDLE_PATH:-vendor/bundle}
/home/travis/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.0.1) required by your /home/travis/build/256hax/ujull-gnote/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.0.1`
    from /home/travis/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems.rb:302:in `activate_bin_path'
    from /home/travis/.rvm/gems/ruby-2.4.1/bin/bundle:23:in `<main>'

NoMethodErrorが表示される

RailsのCredentialsを使っている箇所でエラーが出た。
原因は以下2点。

  • Travis CI上にRAILS_MASTER_KEYの値を登録していないこと
    → 登録することで解決

  • credentials.yml.encファイルがGitHubにあがっていないこと
    → GitHubにアップすることで解決。センシティブな情報なので抵抗はあるが、中身は暗号化されているため、master.keyが流出しない限りは問題ない。

エラー内容(Travis CI Bildログ)

An error occurred while loading ./spec/controllers/comments_controller_spec.rb.
Failure/Error: require File.expand_path('../../config/environment', __FILE__)

NoMethodError:
  undefined method `[]' for nil:NilClass

# ./config/environments/test.rb:55:in `block in <main>'

Credentialsの該当ソース(GitHub)

 :user_name => Rails.application.credentials.gmail[:username], # Gmail Address