CircleCIの導入!

ポートフォリオにCircleCIを導入した話

Dockerに続いてCircleCIを導入しました。具体的なコードと詰まったところについて記述するので、最後まで読んでください。

具体的なコード

version: 2.1

jobs:
  rubocop:
    docker:
      - image: circleci/ruby:2.6.5-node-browsers-legacy
        environment:
          RAILS_ENV: test
          MYSQL_HOST: 127.0.0.1
      - image: circleci/mysql:5.6.47
        environment:
          BUNDLER_VERSION: 2.1.4
          MYSQL_ARROW_EMPTY_PASSWORD: 'true'
          MYSQL_ROOT_HOST: '%'
    working_directory: ~/projects/reading_memo

    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock"}}
            - v1-dependencies-
      - run: gem install bundler -v 2.1.4
      - 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:
          name: Rubocop
          command: bundle exec rubocop 

  rspec:
    docker:
      - image: circleci/ruby:2.6.5-node-browsers-legacy
        environment:
            RAILS_ENV: test
            MYSQL_HOST: 127.0.0.1
      - image: circleci/mysql:5.6.47
        environment:
          BUNDLER_VERSION: 2.1.4
          MYSQL_ROOT_PASSWORD: password
          MYSQL_USER: root
          MYSQL_DB: reading_memo_test
    working_directory: ~/projects/reading_memo
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock"}}
            - v1-dependencies-
      - run: gem install bundler -v 2.1.4
      - 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
      - run:
          name: Rspec
          command: bundle exec rspec

workflows:
  version: 2
  rubocop_rspec:
    jobs:
      - rubocop
      - rspec:
          requires:
            - rubocop

発生したエラーと解決策

Could not find 'bundler' (2.1.4) required by your /home/circleci/projects/reading_memo/Gemfile.lock. (Gem::GemNotFoundException)

解決策

BUNDLER_VERSION: 2.1.4   # image: circleci/mysql:5.6.47のenvironmentのところに追加する(bundle2.0.1以上の場合bundle installに失敗するため、明示的に指定する必要がある)
- run: gem install bundler -v 2.1.4 # - run: bundle install --jobs=4 --retry=3 --path vendor/bundleの上に追加する

The following cops were added to RuboCop, but are not configured.

解決策

.rubocop.ymlにNewCops: enableを追加

AccessorMethodName(Rubocop)

解決策

メソッド名の先頭のsetやgetを消去する

l Can't connect to local MySQL server through socket

解決策

test:
  <<: *default
  database: reading_memo_test
  host: <%= ENV['MYSQL_HOST'] %>  # 追加

Can't connect to MySQL server on '127.0.0.1' (115)

解決策

environment:
  BUNDLER_VERSION: 2.1.4
  MYSQL_ROOT_PASSWORD: password  # 追加
  MYSQL_USER: root
  MYSQL_DB: reading_memo_test

CircleCIを導入してみて

2日ぐらいかかった。基本的なことを勉強してすぐにやったことが良かった。Dockerのときは参考書とか読みすぎた。
自動化はやっぱり気持ち良い。コードとかはまだ完全には理解していないからこれからその辺りを詰めていく必要がある。
とりあえず導入できてよかった。