🛣️
CircleCI 並列テストする
CircleCIでの並列テストの設定は比較的簡単です。以下のように、.circleci/config.yml ファイル内の jobs セクションにて parallelism オプションを設定します。
並列テストのサンプルコード
jobs:
build:
parallelism: 4
docker:
- image: circleci/ruby:2.6.3
steps:
- checkout
- run: bundle install --path vendor/bundle
- run:
command: |
bundle exec rspec $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
- run:
command: |
if [ "${CIRCLE_NODE_INDEX}" == "0" ]; then
bundle exec rubocop
fi
解説
parallelism: 4
: ここでは並列に実行するコンテナ数を設定しています。上記の例では4つのコンテナが作成され、テストが並列に実行されます。
bundle exec rspec $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
: CircleCIのヘルパー関数を用いて、テストファイルを取得し、それを過去の実行時間に基づいて分割します。これにより、各コンテナがほぼ均等な時間で終了するように、テストの分割が行われます。
if [ "${CIRCLE_NODE_INDEX}" == "0" ]; then
: ここでは、"CIRCLE_NODE_INDEX"環境変数を使用しています。この変数は、並列に実行されているジョブの中で、現在のジョブが何番目かを示します(0から始まります)。このコマンドは、CIRCLE_NODE_INDEXが0(つまり、最初のコンテナ)の場合にのみ実行されます。これにより、Lintのジョブは1つのコンテナでのみ実行され、他のコンテナでは実行されません。
Discussion