Agenda
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の設定画面で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>'
:user_name => Rails.application.credentials.gmail[:username], # Gmail Address