有効非巡回グラフ
有向非巡回グラフは、CI/CDパイプラインのコンテキストで、ステージがどのように設定されているかに関わらず、可能な限り最速で実行されるようなジョブ間の関係を構築するために使用できます。
例えば、メインプロジェクトの一部として構築される特定のツールや別のウェブサイトがあるかもしれません。DAGを使うことで、これらのジョブ間の関係を指定することができ、GitLabは各ステージの完了を待つのではなく、できるだけ早くジョブを実行します。
CI/CDのための他のDAGソリューションとは異なり、GitLabはどちらか一方を選択する必要はありません。一つのパイプラインの中で、DAGと従来のステージベースのオペレーションをハイブリッドに組み合わせて実装することができます。設定は非常にシンプルに保たれており、どのジョブでもキーワード一つで機能を有効にすることができます。
次のようなモノレポを考えてみましょう:
./service_a
./service_b
./service_c
./service_d
次のようなパイプラインがあります:
ビルド | テスト | デプロイ |
---|---|---|
build_a | test_a | deploy_a |
build_b | test_b | deploy_b |
build_c | test_c | deploy_c |
build_d | test_d | deploy_d |
DAG を使うことで、_b
のジョブとは別に_a
のジョブを関連づけることができます。サービスa
のビルドに非常に長い時間がかかったとしても、サービスb
はそれを待たずにできるだけ早く終了します。これとまったく同じパイプラインで、_c
と_d
を放っておいて、標準的な GitLab パイプラインと同じようにステージシーケンスで一緒に実行することもできます。
ユースケース
DAGは、CI/CDパイプライン内のジョブ間のいくつかの異なる種類の関係を解決するのに役立ちます。最も一般的な例としては、ジョブのファンインやファンアウト、マージが必要な場合です(ダイヤモンド依存関係)。これは、マルチプラットフォームビルドや、複雑な依存関係のウェブを扱うときに起こります。例えば、オペレーションシステムのビルドや、独立してデプロイ可能だが関連性のあるマイクロサービスの複雑なデプロイメントグラフなどです。
さらに、DAGはパイプラインの一般的な高速化や、迅速なフィードバックの提供に役立ちます。不必要にお互いをブロックしない依存関係を作成することで、パイプラインのステージに関係なくパイプラインを可能な限り高速に実行し、出力(エラーを含む)を可能な限り迅速に開発者に提供できるようにします。
使用方法
ジョブ間の関係は、needs
キーワードを使用して定義します。
needs
キーワードはparallelキーワードとも連動するため、パイプライン内の並列化のための強力なオプションを提供します。
制限事項
有向非巡回グラフは複雑な機能で、初期のMVCでは、回避しなければならないユースケースがあります。詳しくは
-
needs
additional detailsをご覧ください。 - 関連エピックは、改善計画を追跡しています。
ニーズの可視化
ニーズの可視化により、DAG内の依存するジョブ間の関係を簡単に可視化することができます。このグラフは、パイプライン内で他のジョブを必要とする、または他のジョブから必要とされているすべてのジョブを表示します。関係のないジョブはこのビューには表示されません。
ニーズの視覚化を表示するには、needs
キーワードを使用するパイプラインを表示するときに、ニーズを選択します。
ノードを選択すると、そのノードが依存するすべてのジョブパスがハイライトされます。
完全なパイプライングラフでneeds
の関係を見ることもできます。