概要
- 表題まま
- CircleCIとGithubを連携
- rspecとrubocopのインストール
- CircleCIでrspecとrubocopを動かすための設定
前提
- githubのアカウントをもっていること
- 既にrailsのプロジェクトがあること
- Postgresqlをつかった例を説明します
- Mysqlの場合は適宜読みかえてください。
手順
CircleCIとGithubを連携
こちらを参考に。GitHubのアカウントを既に持っていればポチポチするだけです。
- Sign Up and Try CircleCI
- Enabling GitHub Checks
- 【CircleCI】CircleCI 2.0からはじめる個人での簡単なCI導入方法 - githubとの連携まで
rspecとrubocopのインストール
-
rubocopは静的にコードを解析してくれるのと、コードの整形も見てくれます。また、今回は説明しませんが、
rubocop -a
と書くとrubocopの設定に従って整形をしてくれます。 - rspec はrailsのテスト環境です。 rails用のは rspec-railsです。
まずはインストールします。Gemfileに以下を追加します。
group :development, :test do
gem 'rspec-rails'
gem 'rubocop'
end
bundle installします。
bundle install
次に rspec-railsのセットアップ
rails generate rspec:install
rubocopに必須のセットアップは、特にないです。ただ、 .rubocop.yml
は必須です。もし、迷うなら、 railsの .rubocop.yml をコピペ or 参考に作るといいです。
なお、自分のは以下の通りです。
AllCops:
Exclude:
- "tmp/**/*"
- "config/initializers/*"
- "vendor/**/*"
- "db/schema.rb"
- "node_modules/**/*"
- "db/migrate/*.rb"
- "bin/*"
DisplayCopNames: true
TargetRubyVersion: 2.6.0
Rails:
Enabled: true
Style/AndOr:
EnforcedStyle: conditionals
Style/AsciiComments:
Enabled: false
Style/Documentation:
Enabled: false
Style/NumericLiterals:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
Bundler/OrderedGems:
Enabled: false
Lint/ShadowedException:
Enabled: false
CircleCIでrspecとrubocopを動かすための設定
CircleCIとGithubを連携 の時点でgithubにcommitと同時にCircleCIのjobが走るようになっています。ただ、当然ながら何もしてないので、 失敗します。(failしましたのメールがgithubのアカウントのメールアドレスに届いているはず)
正常にrspecとrubocopを動かすためには .circleci/config.yml
を新規追加/編集します。
CircleCI公式のrailsの例はこちらにあります。
で、最終的に使っているのは以下の通り。
# Ruby CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
#
version: 2
jobs:
rubocop:
docker:
- image: circleci/ruby:2.6.0-node-browsers-legacy
environment:
RAILS_ENV: test
POSTGRES_HOST: 127.0.0.1
- image: circleci/postgres:9.4
environment:
POSTGRES_USER: postgres
POSTGRES_DB: app_test
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: bundle install --jobs=4 --retry=3 --path vendor/bundle
- run: yarn install
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
# Rubocop
- run:
name: Rubocop
command: bundle exec rubocop
rspec:
docker:
- image: circleci/ruby:2.6.0-node-browsers-legacy
environment:
RAILS_ENV: test
POSTGRES_HOST: 127.0.0.1
- image: circleci/postgres:9.4
environment:
POSTGRES_USER: postgres
POSTGRES_DB: app_test
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: bundle install --jobs=4 --retry=3 --path vendor/bundle
- run: yarn install
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
- run: bundle exec rake db:create
- run: bundle exec rake db:schema:load
# Rspec
- run:
name: Rspec
command: bundle exec rspec
workflows:
version: 2
rubocop_rspec:
jobs:
- rubocop
- rspec:
requires:
- rubocop
まずimageを、 CircleCIのdocker hubからえらびます。
今回は2.6.0を使いました。
imageの環境変数は environment key で指定しました。
Service container image available at host: localhost とあるので、 hostには、 127.0.0.1
と指定します。( localhost
でもいいかもしれませんが、試していません。)
RAILS_ENV: test
はtest環境で起ち上げるためです。
- image: circleci/ruby:2.6.0-node-browsers-legacy
environment:
RAILS_ENV: test
POSTGRES_HOST: 127.0.0.1
postgresqlのイメージを指定します。違うバージョンを使っている場合はこちら から適宜選んでください。
POSTGRES_USER
と POSTGRES_DB
はご自分の config/database.yml
の記載にあわせてください。
- image: circleci/postgres:9.4
environment:
POSTGRES_USER: postgres
POSTGRES_DB: app_test
rubocopの実行した後、rspecを実行します。circle ci時間の節約のため、rubocopがfailしたらrspecをやらないように requires
で rubocopを指定しています。
workflows:
version: 2
rubocop_rspec:
jobs:
- rubocop
- rspec:
requires:
- rubocop
databaseの設定は以下の通りです。 app_xxxx
のところは各自の環境にあわせてください。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: postgres
password:
host: <%= ENV['POSTGRES_HOST'] %>
development:
<<: *default
database: app_development
test:
<<: *default
database: app_test
開発環境での POSTGRES_HOST
は環境変数で指定してあげます。環境変数はdotenv を使い、開発環境構築にはdockerをつかっていて、 db
という名前でpostgresqlが起動しているので下記のようにしています。
POSTGRES_HOST=db
あとは、これをcommitしてあげると、CircleCIが動くことを確認して下さい。
以上、