個人的に作成しているアプリケーションのCIツールとして、CircleCIを使用しています。
1コンテナであれば無料で使えるようなので、個人制作でCIにあまり時間が使えない場合は重宝します。
今回は単純ですが、RailsアプリケーションのRSpec実行とCapistranoによるデプロイを設定したファイルを記載したいと思います。
CircleCIに関する記事は多く存在するので、ここでは詳細は割愛させていただきます。
ただ、導入した際に、私が感じたことをメモ程度でまとめておきます。
version: 2 jobs: build: # 対象のブランチ # master に限定 branches: only: - master # 使用する Docker イメージ # Rails 用の Ruby イメージ # MySQL 用のイメージ docker: - image: circleci/ruby:2.5.1-node-browsers # MySQL に接続するための環境変数を設定 # テスト用なのでデフォルトのまま(rootユーザー) environment: RAILS_ENV: test DB_HOST: 127.0.0.1 DB_USERNAME: 'root' DB_PASSWORD: '' - image: circleci/mysql:5.7 working_directory: ~/repo steps: - checkout # SSH鍵を設定 - add_ssh_keys: fingerprints: "aaaaaaaaaaa" - restore_cache: keys: - v1-dependencies-{{ checksum "Gemfile.lock" }} # fallback to using the latest cache if no exact match is found - v1-dependencies- - run: name: install dependencies command: | bundle install --jobs=4 --retry=3 --path vendor/bundle - save_cache: paths: - ./vendor/bundle key: v1-dependencies-{{ checksum "Gemfile.lock" }} # テストデータベースの設定 - run: rm ./config/database.yml - run: mv ./config/database.yml.ci ./config/database.yml - run: bundle exec rake db:create RAILS_ENV=test - run: bundle exec rake db:migrate RAILS_ENV=test # テスト実行 - run: name: run tests command: | mkdir /tmp/test-results TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)" bundle exec rspec --format progress \ --out /tmp/test-results/rspec.xml \ $TEST_FILES - store_test_results: path: /tmp/test-results - store_artifacts: path: /tmp/test-results destination: test-results # ssh-agent で鍵を登録 - run: name: Add ssh-agent command: | ssh-agent -s > ~/.ssh_agent_conf source ~/.ssh_agent_conf for _k in $(ls ${HOME}/.ssh/id_*); do ssh-add ${_k} || true done # デプロイ name: Deploy Master command: | bundle exec cap production deploy
横着しただけですが、開発環境のMySQLのログインパスワードと、CI環境のログインパスワードが違う場合、 database.yml
も変わるかと思います。
(合わせれば良いだけの話ですが。)
環境変数を使う方法もあるようですが、私は `database.yml.ci` というファイルを作成して、コンテナ生成時に本来の database.yml
と入れ替えるようにしました。
上のコードでいうと、下記の部分です。
# テストデータベースの設定 - run: rm ./config/database.yml - run: mv ./config/database.yml.ci ./config/database.yml - run: bundle exec rake db:create RAILS_ENV=test - run: bundle exec rake db:migrate RAILS_ENV=test
冒頭でも書きましたが、CircleCIはかなり導入コストが低いため、あまりCI構築に時間をかけられない場合にお勧めします。
テストとデプロイでジョブを切ったりもできるようなので、ぜひお試しください。