有効非巡回グラフ
- GitLab 12.2で導入されました。
- GitLab 12.10でフィーチャーフラグが削除されました。
有向非巡回グラフは、CI/CDパイプラインのコンテキストで使用することができ、ステージがどのように設定されているかに関係なく、実行が可能な限り迅速な方法で実行されるようにジョブ間の関係を構築します。
例えば、メインのプロジェクトの一部として特定のツールや別のウェブサイトを構築する場合があります。 DAGを使用すると、これらのジョブの関係を指定することができ、GitLabは各ステージの完了を待つ代わりに、できるだけ早くジョブを実行します。
CI/CDのための他のDAGソリューションとは異なり、GitLabではどちらか一方を選択する必要はありません。 DAGと従来のステージベースのオペレーションをハイブリッドに組み合わせて、1つのパイプラインに実装することができます。 設定は非常にシンプルに保たれており、どのジョブでも機能を有効にするには1つのキーワードが必要です。
モノレポを次のように考えます:
./service_a
./service_b
./service_c
./service_d
以下のようなパイプラインがあります:
ビルド | テスト | デプロイ |
---|---|---|
ビルド | test_a | デプロイ_a |
ビルドビー | test_b | デプロイ |
ビルド | test_c | デプロイ |
ビルド_d | test_d | デプロイ_d |
DAGを使うことで、_b
のジョブとは別に、_a
のジョブ同士を関連付けることができます。サービスa
のビルドに非常に長い時間がかかったとしても、サービスb
はそれを待たずにできるだけ早く終了します。この全く同じパイプラインでは、_c
と_d
は放っておくことができ、通常のGitLabパイプラインと同じようにステージシーケンスで一緒に実行されます。
ユースケース
DAGは、CI/CDパイプライン内のジョブ間のいくつかの異なる種類の関係を解決するのに役立ちます。 最も一般的なのは、ジョブがファンインまたはファンアウトする必要がある場合、および/またはマージバックする必要がある場合(ダイヤモンド依存関係)です。 これは、マルチプラットフォームビルドや、オペレーティングシステムビルドのような依存関係の複雑なウェブ、または独立してデプロイ可能だが関連するマイクロサービスの複雑なデプロイメントグラフを扱う場合に発生する可能性があります。
さらに、DAGはパイプラインの一般的な高速化や、迅速なフィードバックの提供にも役立ちます。 不必要にお互いをブロックしない依存関係を作成することで、パイプラインはパイプラインステージに関係なく可能な限り迅速に実行され、出力(エラーを含む)を開発者が可能な限り迅速に利用できるようになります。
使用方法
ジョブ間の関係は、needs:
キーワードを使用して定義されます。
また、needs:
はparallelキーワードでも動作するため、パイプライン内で並列化するための強力なオプションを提供します。
制限事項
有向非巡回グラフは複雑な機能であり、初期のMVCの時点では、特定のユースケースを回避する必要があるかもしれません。 詳細については、こちらをご覧ください:
-
needs
要件と制限. - 改善計画を追跡する関連エピック。
DAGの可視化
DAG可視化により、DAG内の依存するジョブ間の関係を簡単に可視化できます。 このグラフは、パイプライン内の、他のジョブを必要とする、または他のジョブによって必要とされるすべてのジョブを表示します。 関係のないジョブは、このビューには表示されません。
ノードをクリックすると、そのノードが依存しているすべてのジョブパスがハイライトされます。
DAG可視化の有効化または無効化
DAGビジュアライゼーションは開発中であり、より多くのテストが必要ですが、ユーザーがその制限や用途を確認できるよう、ベータ機能として提供しています。
GitLab RailsコンソールにアクセスできるGitLab管理者は、インスタンスでこの機能を有効にすることができます:
# Instance-wide
Feature.enable(:dag_pipeline_tab)
# or by project
Feature.enable(:dag_pipeline_tab, Project.find(<project id>))