🛣️

CircleCI 並列テストする

2023/06/27に公開

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