notebook

都内でWEB系エンジニアやってます。

Jestの並列実行をGitLab-CIで行う

Jestの並列実行オプション

Jestのv28から分割して実行できるオプションが追加された

Jest CLI オプション · Jest

jestjs.io

--shard 1/3といった形式で実行できる

3分割する場合

  • --shard 1/3
  • --shard 2/3
  • --shard 3/3

というように3つコマンドを実行するとそれぞれで3分割したうちの1つ目、2つ目、3つ目というように実行ファイルを分割してくれる

これを使ってテストの実行時間を短縮しましょうという感じ

GitLab-CIで並列実行する

GitLab-CIで並列実行をする場合はparallelを使用する(GitLab 11.5から)

parallelを使用するとジョブごとに、環境変数CI_NODE_TOTALCI_NODE_INDEXが設定される

  • 実際の設定
test:
  stage: test
  image: node:16
  parallel: 5
  script:
    - yarn install
    - yarn jest --shard ${CI_NODE_INDEX}/${CI_NODE_TOTAL}

GitLab CI/CD パイプライン設定リファレンス | GitLab

gitlab-docs.creationline.com

なので今回の設定だとshardの値は次のようになりそれぞれJobが実行される

  • yarn jest --shard 1/5
  • yarn jest --shard 2/5
  • yarn jest --shard 3/5
  • yarn jest --shard 4/5
  • yarn jest --shard 5/5

custom sequencer

Jestの設定 · Jest

jestjs.io

このshardメソッドをゴニョゴニョすることでテストファイルの並びをコントロールできるよう

時間のかかるテストとそうじゃないテストをうまく組み合わせて並列で実行しているテストの時間をなるべく均一するとかもできそうな気がしている

まぁそこまでやるか?という話もあるが…