同時実行

1+ year ago1 min read
Last updated • Read time
クラウド
This document is applicable to CircleCI クラウド
Server v4.x
This document is applicable to CircleCI Server v4.x
Server v3.x
This document is applicable to CircleCI Server v3.x

ここでは同時実行について概説し、活用する方法を紹介します。

CircleCI では、同時実行とは複数のコンテナを使用して、複数のビルドを同時に実行することを指します。 これは、複数のコンテナにテストを分割する 並列実行とは異なります。 並列実行については、 テストの並列実行のページをご覧ください。

CircleCI のすべてのプランにジョブの同時実行機能が含まれています。 しかし、同時に実行できるジョブの数はプランによって異なります。 お客様のプランに含まれる同時実行が可能なジョブの数に関する最新情報は、 料金プランのページ を参照してください。

同時実行

CircleCI では、ジョブの同時実行は下記の 2 つの状況に分られます。

  • 1 つのワークフロー内に設定された複数の実行ジョブ

  • 組織内の複数のメンバーが実行する複数のワークフロー

ここでは 1 つ目の状況について説明し、1 つのワークフロー内に複数のジョブを設定する方法の例を紹介します。 ワークフロー内で同時実行を設定すると、単一のワークフロー内で複数のコンテナを使用して複数のジョブを同時に実行することができます。

CircleCI のすべてのお客様がシステムを安定した状態で利用できるよう、各 Executor の リソースクラスごとに同時実行数のソフト制限が設けられています。

ジョブがキューに入る場合、この制限に達している可能性が考えられます。 制限に達する理由は、組織内で同時にジョブを実行しているユーザーの数や、ワークフローが重複しているなど、複数の要因があります。

年間プランのお客様は、追加料金なくこの制限の拡大を依頼することができます。 CircleCI サポート にご連絡ください。

ワークフロー内での同時実行

一連の同時実行ジョブを実行するには、既存の .circleci/config.yml ファイルに workflows セクションを追加する必要があります。

以下は、2 つの同時実行ジョブから成るデフォルトのワークフローオーケストレーションのシンプルな例です。 この workflows キーには一意の名前を指定する必要があります。 この例では、一意の名前は build_and_test です。 jobs キーは一意の名前のワークフローの下にネストされ、ジョブ名のリストが含まれます。 ジョブには依存関係が定義されていないため、同時に実行されます。

version: 2.1

jobs:
  build:
    docker:
      - image: cimg/<language>:<version TAG>
    steps:
      - checkout
      - run: <command>
  test:
    docker:
      - image: cimg/<language>:<version TAG>
    steps:
      - checkout
      - run: <command>
workflows:
  build_and_test:
    jobs:
      - build
      - test

ファンアウト/ファンイン ワークフローの例

同時実行ワークフローを使ったより複雑な例では、共通のビルドジョブを実行し、次にファンアウトして一連の受け入れテストジョブを同時に実行し、最後にファンインして共通のデプロイジョブを実行します。 その流れは以下の通りです。

Fan-out and Fan-in Workflow

下記の .circleci/config.yml スニペットは、ファンイン・ファンアウトジョブの実行が設定された workflows の例です。 この例では、build ジョブが成功した後すぐに 4 つの受け入れテスト jobs がスタートします。 4 つの acceptance_test ジョブすべてが成功するのを待って、 deploy ジョブが実行されます。

...
workflows:
  build_accept_deploy:
    jobs:
      - build
      - acceptance_test_1:
          requires:
            - build
      - acceptance_test_2:
          requires:
            - build
      - acceptance_test_3:
          requires:
            - build
      - acceptance_test_4:
          requires:
            - build
      - deploy:
          requires:
            - acceptance_test_1
            - acceptance_test_2
            - acceptance_test_3
            - acceptance_test_4
...