見出し画像

CircleCIで自動テスト、デプロイを走らせてみた

対象読者

サークルCIを理解し、自分と似たような開発環境でサークルCIを導入して、自動テストや、自動デプロイを実装したい方向けに本記事を書いております。かなり限定的ですが、お役に立てることがあるかと思いますのでぜひ最後まで読んでください

開発環境

Ruby:2.6.5

Ruby on Rails:6.0.3.4

docker-compose

Capistrano:3.14.1

開発状況

CapistranoでAWS(EC2)に自動デプロイを実装後、ローカル環境にdocker-composeを実装し、CircleCIを走らせる時はimageを指定するだけの状況になっている。


これから実装すること

私が参考にした記事がありますので、そちらを元に実装するとわかりやすいと思いますのでそちらみて実装してください!

https://qiita.com/AK4747471/items/882b70f663f4a80ae770

こちらの実装を参考にし、自分用ににカスタマイズして実装をした結果↓

version: 2.1
jobs:
 build:
   docker:
   - image: circleci/ruby:2.6.5-node-browsers
     environment:
       - BUNDLER_VERSION: 2.2.3
       - RAILS_ENV: 'test'
   - image: circleci/mysql:5.7
     environment:
       - MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
       - MYSQL_ROOT_HOST: '127.0.0.1'

   working_directory: ~/


   steps:
   - checkout

   - restore_cache:
       keys:
       - v1-dependencies-{{ checksum "Gemfile.lock" }}
       - v1-dependencies-

   - run:
       name: install dependencies
       command: |
         gem install bundler -v 2.2.3
         bundle install --jobs=4 --retry=3 --path vendor/bundle

   - save_cache:
       paths:
       - ./vendor/bundle
       key: v1-dependencies-{{ checksum "Gemfile.lock" }}

   # Database setup
   - run: mv ./config/database.yml.ci ./config/database.yml

   # Database setup
   - run:
       name: DatabaseSetup
       command: |
          bundle exec rake db:create
          bundle exec rake db:schema:load

   # yarn install
   - run:
       name: yarn Install
       command: yarn install


   - run: bundle exec bin/webpack

   # run tests!
   - run:
       name: 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 \
                         --out /tmp/test-results/rspec.xml \
                         --format progress \
                         $TEST_FILES

   - add_ssh_keys:
       fingerprints:
       - ""

  - deploy:
     name: Capistrano deploy
     command: |
       if [ "${CIRCLE_BRANCH}" != "master" ]; then
         exit 0
       fi
       bundle exec cap production deploy
   # collect reports
   - store_test_results:
       path: /tmp/test-results
   - store_artifacts:
       path: /tmp/test-results
       destination: test-results

個人の記述に関しては消してありますが、大体の記述に関しては動きますので、エラーが出ていない今は大丈夫だと思います。

この記述の走らせると一部ではありますが、このようになります。

自動テスト


注意したこと

ネットの記事を参考にする上で注意したこと!
1. ディレクトリ構造
2. スペルミス
3. ファイル名
4. バージョン

この四つは必ず意識してコピペや転用した方が良いと思います。
実際にここの四つを意識しないと、永遠に理解できないエラーにハマってしまう可能性があるため、十分にきおつけて実装すると良いでしょう。
また理解不足によるミスも起きてしまう可能性があるため、実装時はある程度理解した状況で実装を進めるといいと思います。