railsアプリにCircleCIを導入する
はじめに
railsアプリにCircleCIを導入してCI部分のRspecとRubocopを自動化してみました。
設定方法
まずはアプリのルートディレクトリに.circleci
というディレクトリを作り、その配下にconfig.yml
というファイルを作ります。
そのファイルにcircleciの設定を記述していきます。
version: 2 jobs: build: # workflowsを使わない場合はbuildというジョブを定義する docker: - image: circleci/ruby:2.7.2-node-browsers-legacy # 使用するdockerのイメージを指定する environment: - BUNDLER_VERSION: 2.1.4 # bundlerのバージョン指定 - RAILS_ENV: test # 実行するデータベース名を指定 # database.yml.ciで使用する環境変数を設定 - MYSQL_HOST: 127.0.0.1 - MYSQL_USER: root - MYSQL_PASSWORD: '' - MYSQL_PORT: 3306 - TZ: "Japan" # データベース側の環境 - image: circleci/mysql:5.7 environment: - MYSQL_ALLOW_EMPTY_PASSWORD: 'true' - MYSQL_ROOT_HOST: '%' working_directory: ~/repo steps: # githubのリポジトリを取得 - checkout # yarnインストール - run: name: yarn Install command: yarn install # キャッシュがあればリストアする - restore_cache: keys: - v1-dependencies-{{ checksum "Gemfile.lock" }} - v1-dependencies- # bundlerのインストールとbundle install実行 - run: name: Install dependencies command: | gem install bundler -v 2.1.4 # 並列処理 bundle install --path=vendor/bundle --jobs 4 --retry 3 # キャッシュする - save_cache: key: v1-dependencies-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle # データベースのセットアップ - run: name: Database Setup command: | mv ./config/database.yml.ci ./config/database.yml bundle exec rake db:create bundle exec rake db:schema:load # rubocop実行 - run: name: Rubocop command: bundle exec rubocop # rspec実行 - run: name: Run rspec command: | mkdir ./tmp/test-results # テスト結果を保存するディレクトリを作成 # テストを分割して実行する設定 TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \ circleci tests split --split-by=timings)" bundle exec rspec \ --format progress \ --format RspecJunitFormatter \ --out /tmp/test-results/rspec.xml \ --format progress \ $TEST_FILES # 結果を保存 - store_test_results: path: /tmp/test-results # テスト結果をCircleCIアプリのARTIFACTSに表示する - store_artifacts: path: /tmp/test-results destination: test-results
test: &default adapter: mysql2 encoding: utf8 charset: utf8 pool: 5 username: <%= ENV.fetch("MYSQL_USER") %> password: <%= ENV.fetch("MYSQL_PASSWORD") %> host: <%= ENV.fetch("MYSQL_HOST") %> port: <%= ENV.fetch("MYSQL_PORT") %> database: ci_test
ローカルで動作確認
$ brew install circleci
下記コマンドで.circleci.config.yml
ファイルの文法をチェック
$ circleci config validate .circleci/config.yml
下記コマンドで指定したジョブを実行
$ circleci local execute --job build