前回作ったCircleCIの設定の続きです。orbを使ったものに書き換えました。
参照: Language Guide: Ruby - CircleCI
version: 2.1
orbs:
ruby: circleci/ruby@1.1.1
node: circleci/node@4.0.0
browser-tools: circleci/browser-tools@1.0.1
jobs:
build:
docker:
- image: cimg/ruby:2.6.6-node
environment:
BUNDLE_JOBS: "3"
BUNDLE_RETRY: "3"
steps:
- checkout
- ruby/install-deps:
bundler-version: 2.1.4
- node/install-packages:
pkg-manager: yarn
test:
docker:
- image: cimg/ruby:2.6.6-node
- image: circleci/postgres:11.7
environment:
POSTGRES_USER: circleci
POSTGRES_DB: blog_rails6_test
POSTGRES_HOST_AUTH_METHOD: trust # パスワードなし
environment:
BUNDLE_JOBS: "3"
BUNDLE_RETRY: "3"
PGHOST: 127.0.0.1
PGUSER: circleci
PGPASSWORD: ""
TZ: "/usr/share/zoneinfo/Asia/Tokyo"
RAILS_ENV: test
steps:
- checkout
- ruby/install-deps:
bundler-version: 2.1.4
- node/install-packages:
pkg-manager: yarn
- browser-tools/install-chrome
- browser-tools/install-chromedriver
- run:
name: DB Initializing
command: |
dockerize -wait tcp://localhost:5432 -timeout 1m
bundle exec rake db:schema:load
- run:
name: rspec
command: |
bundle exec rspec --format RspecJunitFormatter \
--out test_results/rspec.xml \
--format documentation
- store_test_results:
path: test_results
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build
以下、自分用メモ。
Orbとは?
いまいち理解できていませんが、次のようなものだと考えます。
- steps に置くコマンドで、よく使うものをまとめたもの。
- docker の欄に指定する image とは関係ない。
orbsの欄にorbの名前を置くと、その機能(コマンド)が使えます。
上記の例では、circleci/ruby@1.1.1 というorbの持っているコマンドが ruby/install-deps
で、circleci/node@4.0.0 というorbの持っているコマンドが node/install-packages
です。bundler-version
や pkg-manager
は各コマンドのオプションです。
上記の例では、Gemやnode_modulesをキャッシュしたりキャッシュを戻したりするのに使っています。
CircleCI公式のorbのリストは、CircleCI Orb Registryにあります。
workflowsとjobs
workflowsを使うと、jobsの下に置いた複数のジョブの順番を指定できます。この例では、まずbuildジョブを実行して、それが終了してからbuildジョブを実行します。
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build
この例だと全部1つのジョブにまとめても同じようなものですが、parallelismを指定して複数のrspecを並行に動作させる場合に必要になります(あとで記事を追加する予定)。
新しいイメージとChromeのインストール
最近CircleCIは "cimg/" で始まる新しいイメージを提供しています。よくわからないけど新しいものの方がよいだろうということで、cimg/ruby:2.6.6-node を使うことにしました。
cimg/ruby:2.6.6-node にはE2Eテスト用のブラウザーが入っていないので、ブラウザーをインストールするorb、circleci/browser-tools@1.0.1 を使うことにしました。
orbs:
ruby: circleci/ruby@1.1.1
node: circleci/node@4.0.0
browser-tools: circleci/browser-tools@1.0.1
次のorbのコマンドでインストールできます。これまでのイメージ circleci/ruby:xxx-node-browsers ではFirefoxもいっしょに入るので、Chromeだけインストールする方が無駄がなくていいかもしれません。
steps:
# 略
- browser-tools/install-chrome
- browser-tools/install-chromedriver
# 略