はじめに
ずっと前に作った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行でいけるのがびっくり。
ここまで行き着くまでいろんなサイト見てきたけどやっぱ公式が最強だった。
結構沼ったけどうまくいって最後まで通るとやっぱ嬉しいよね〜。