ワークフローとは
ワークフローは、CircleCIパイプライン内の複数のジョブをオーケストレーションし、調整する方法です。ワークフローは、ジョブの順序と依存関係を定義する柔軟で構成可能な構造を提供し、並列実行、条件付きステップ、およびファンイン/ファンアウトパターンを使用したより高度なパイプラインを開発者が作成できるようにします。
主要コンポーネント
CircleCIのワークフローには3つの主要コンポーネントがあります。
- ジョブ: ビルド、テスト、コードのデプロイなど、特定の操作を実行する独立したタスク。
- ワークフロー: パイプライン内のジョブの順序と依存関係を定義するルールのセット。
- コンフィグ: ジョブとワークフローの定義を含むパイプライン構成のYAMLファイル(
.circleci/config.yml
)。
シンプルなワークフローの作成
まず、ビルド、テスト、デプロイの3つのジョブで構成されるシンプルなワークフローを作成します。
CircleCIプロジェクトの構成
- CircleCIアカウントにサインアップするか、すでに持っている場合はログイン
- バージョン管理システム(GitHubまたはBitbucket)をCircleCIに接続
- リポジトリのリストからプロジェクトを選択して、CircleCIにプロジェクトを追加
基本的なワークフローの定義
プロジェクトのリポジトリ内に、.circleci
ディレクトリとその内部にconfig.yml
ファイルを作成します。このファイルには、ジョブとワークフローの定義を含むパイプラインの構成が含まれます。
version: 2.1
jobs:
build:
# Job configuration for the "build" job
test:
# Job configuration for the "test" job
deploy:
# Job configuration for the "deploy" job
workflows:
version: 2
my_workflow:
jobs:
- build
- test:
requires:
- build
- deploy:
requires:
- test
ワークフローの実行と監視
- 変更内容をリポジトリにプッシュ
- CircleCIは新しい構成を自動的に検出し、ワークフローの実行を開始
ワークフローの進行状況を監視するには、CircleCIダッシュボードに移動してプロジェクトを選択します。各ジョブのステータスを含むパイプラインの実行概要が表示されます。
並列実行とファンイン/ファンアウト
CircleCIのワークフローでは、並列実行とファンイン/ファンアウトパターンを利用して、CI/CDパイプラインの実行時間を最適化できます。
並列実行によるビルドの加速
CircleCIの並列実行には、タスクをより速く処理するために、同時に複数のジョブインスタンスを実行することが含まれます。各ジョブの並列度をparallelism
キーを使用して構成することができます。
例えば、テストを実行するジョブがある場合、テストスイートを4つの並列タスクに分割したい場合は、parallelism
キーを4
に設定することができます。
jobs:
test:
parallelism: 4
# Job configuration for the "test" job
ファンインとファンアウトの理解
ファンアウトとは、単一のジョブが複数のダウンストリームジョブをトリガーするパターンです。一方、ファンインは、複数のジョブが単一のダウンストリームジョブに収束するパターンです。これらのパターンを使用することで、必要に応じて結果を統合しつつ、ジョブを並列実行することでCI/CDパイプラインを最適化することができます。
ワークフローでの並列実行、ファンイン、ファンアウトの実装
ワークフローで並列実行、ファンイン、ファンアウトを実装するには、requires
キーを使用してジョブの依存関係を定義することができます。特定のジョブが実行される前に完了する必要があるジョブを指定することで、パイプラインの実行を最適化する複雑なワークフローを作成することができます。
例えば、次のジョブがあるワークフローを考えてみます。
build
test_a
、test_b
、test_c
(並列実行)deploy
このワークフローを次のように定義できます。
workflows:
version: 2
my_workflow:
jobs:
- build
- test_a:
requires:
- build
- test_b:
requires:
- build
- test_c:
requires:
- build
- deploy:
requires:
- test_a
- test_b
- test_c
条件付きワークフローと承認
CircleCIのワークフローでは、条件付き実行とマニュアル承認をサポートしているため、パイプラインに対するより細かい制御が可能です。
条件付きワークフローの定義
when
キーとunless
キーを使用して、事前に定義された条件やカスタムロジックと共に条件付きワークフローを作成することができます。例えば、特定のブランチがプッシュされた場合にのみジョブを実行することができます。
workflows:
version: 2
my_workflow:
jobs:
- build
- deploy:
requires:
- build
filters:
branches:
only: /^release-.*/
承認ステップの実装
CircleCIのマニュアル承認ステップを使用すると、ワークフローを一時停止して、ユーザーの承認待ち状態にすることができます。承認ステップをワークフローに追加するには、type: approval
キーを使用します。
workflows:
version: 2
my_workflow:
jobs:
- build
- test
- hold_for_approval:
type: approval
requires:
- test
- deploy:
requires:
- hold_for_approval
複雑な条件付きワークフロー
CircleCIのパイプラインパラメータとカスタムロジックを使用して、複雑な条件付きワークフローを作成することもできます。パイプラインパラメータは、キーと値のペアであり、構成ファイルに渡すことができ、ワークフローの条件付きロジックを定義するために使用することができます。パイプラインパラメータを作成するには、config.yml
ファイル内のversion
キーの下にparameters
キーを追加してください。
version: 2.1
parameters:
deploy_production:
type: boolean
default: false
jobs:
# Job definitions
workflows:
version: 2
my_workflow:
jobs:
- build
- test
- deploy_staging
- hold_for_approval:
type: approval
requires:
- deploy_staging
- deploy_production:
requires:
- hold_for_approval
when: << pipeline.parameters.deploy_production >>
この例では、deploy_production
パイプラインパラメータがtrueに設定されている場合にのみ、deploy_production
ジョブが実行されます。このパラメータは、CircleCI APIを介してパイプラインをトリガーする際に渡すことができます。
参考