LoginSignup
3
2

More than 1 year has passed since last update.

【2021年最新版】circleCI2.1 Ruby3.x + Rails6.x + MySQL8.x RSpec〜rubocop【M1Mac】

Last updated at Posted at 2021-06-19

はじめに

ずっと前に作ったcircleCIちょっといじったら動くかなってやってみたら全然動かなかったのでいっそ作り直してみた。
定期的にメンテというか動かしてみるのは大事だなと。
100行くらい短くなったのでテンション上がった。

実践!

動作環境

M1 Mac
ruby 3.0.1
Rails 6.1.3.2
Bundler 2.2.19

rubocopとRSpecはすでに導入しているものとする。

group :development do
  gem "rubocop-rails", require: false
  gem "rubocop-rspec", require: false
end

group :test do
  gem "rspec_junit_formatter"
  gem "rspec-rails"
end

公式と同じことすればOK

Dockerイメージのバージョン一覧

Ruby

# バージョン選び方
cimg/ruby:3.0.1-node-browsers
cimg/ruby:3.0.1-node
# だとchromeとかxvfb入ってない
cimg/ruby:3.0.1-browsers
# だとnodeとかyarn入らない

MySQL

全体像

.circleci/config.yml

version: 2.1

orbs:
  ruby: circleci/ruby@1.1.3
  node: circleci/node@4.5.1

jobs:
  build:
    docker:
      - image: cimg/ruby:3.0.1-node
    steps:
      - checkout
      - ruby/install-deps
      - node/install-packages:
          pkg-manager: yarn
  test:
    docker:
      - image: cimg/ruby:3.0.1-node
        environment:
          RAILS_ENV: test
      - image: circleci/mysql:latest
        command: mysqld --default-authentication-plugin=mysql_native_password
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: true
    environment:
      BUNDLE_JOBS: "4"
      BUNDLE_RETRY: "3"
      BUNDLE_PATH: vendor/bundle
    steps:
      - checkout
      - ruby/install-deps
      - node/install-packages:
          pkg-manager: yarn
      - run:
          name: Watting stand up database
          command: |
            dockerize -wait \
            tcp://127.0.0.1:3306 -timeout 1m
      - run: mv ./config/database.yml.ci ./config/database.yml
      - run:
          name: Database setup
          command: |
            bundle exec rails db:create db:migrate db:seed
      - ruby/rspec-test
      - ruby/rubocop-check

workflows:
  build_and_test:
    jobs:
      - build
      - test:
          requires:
            - build

コード自体はこれでいいのだが、このまま動かすとエラーになる。

エラー対策

x86_64-darwin-20⇨x86_64-linuxにせよ!

Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
is x86_64-linux. Add the current platform to the lockfile with `bundle lock
--add-platform x86_64-linux` and try again.

これDockerのときも同じようなエラーになったんだよな〜。
M1Macだからかなって思ってたけどBundler 2.2.x以降でエラーになるっぽい。

参考記事

Dockerみたいにplatform: linux/amd64と記述するとplatformのキーなんて存在しないって怒られる。

gemfile.lockのplatformのところにx86_64-linuxを追加してあげることで解決

$ bundle lock --add-platform x86_64-linux

できればcircleCIのconfig.yml内で解決したかったが。。。

rails6からyarnをインストールせよ!

- node/install-packages:
  pkg-manager: yarn

これを記述してあげてyarnをインストールするようにする。
↑のコードはすでに記述済み

nodeが必要になるのでdockerイメージのバージョン選びはこれのどちらかが無難じゃなかろうか。

cimg/ruby:3.0.1-node-browsers
cimg/ruby:3.0.1-node

これでOKさ!

おわり

なんか試行錯誤してたら153行だったのが53行になった!
前が無駄な部分が多すぎたのかもしれない。
orbsとか使ってなかったし。
rspecとrubocopの記述が2行でいけるのがびっくり。
ここまで行き着くまでいろんなサイト見てきたけどやっぱ公式が最強だった。
結構沼ったけどうまくいって最後まで通るとやっぱ嬉しいよね〜。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2