needsでジョブをより早く開始する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
needsキーワードを使用すると、パイプライン内のジョブ間に依存関係を作成できます。ジョブは、パイプラインのstages設定に関係なく、依存関係が満たされるとすぐに実行されます。ステージが定義されていないパイプライン(事実上1つの大きなステージ)を設定することもでき、ジョブは引き続き適切な順序で実行されます。このパイプライン構造は、一種の有向非巡回グラフです。
たとえば、特定のツールや個別のWebサイトをメインプロジェクトの一部として構築できます。needsを使用すると、これらのジョブ間の依存関係を指定でき、GitLabは各ステージの完了を待つ代わりに、可能な限り早くジョブを実行します。
CI/CDの他のソリューションとは異なり、GitLabでは、ステージ構成のある実行フローとステージレスの実行フローのいずれかを選択する必要はありません。needsキーワードを使用するだけで、任意のジョブでこの機能を利用でき、1つのパイプライン内でステージ構成とステージレス構成を組み合わせたハイブリッドな実装が可能です。
次のようなモノレポについて考えてみましょう:
./service_a
./service_b
./service_c
./service_dこのプロジェクトでは、パイプラインを次の3つのステージに分けて構成できます:
| build | test | deploy |
|---|---|---|
build_a | test_a | deploy_a |
build_b | test_b | deploy_b |
build_c | test_c | deploy_c |
build_d | test_d | deploy_d |
needsを使用して、aのジョブをb、c、dのジョブとは別に関連付けることで、ジョブの実行を効率化できます。build_aのビルドには非常に時間がかかる可能性がありますが、test_bはそれを待つ必要はありません。build_bが完了したらすぐに開始するように設定できます。これにより、はるかに高速化できる可能性があります。
必要に応じて、cおよびdのジョブはそのままステージ順で実行させることもできます。
needsキーワードはparallelキーワードとも併用でき、パイプラインで並列処理を行うための強力なオプションを提供します。
ユースケース
needsキーワードを使用すると、CI/CDパイプラインのジョブ間にさまざまな種類の依存関係を定義できます。依存関係を扇状に分岐させたり、扇状に集約させたり、さらにそれらを再び1つにマージする(ダイヤモンド型の依存関係を構築する)こともできます。これらの依存関係は、次のパイプラインに使用できます:
- マルチプラットフォームのビルドを処理する。
- オペレーティングシステムのビルドのように、依存関係が複雑に入り組んでいる。
- 個別にデプロイ可能だが関連性のあるマイクロサービスのデプロイグラフがある。
さらに、needsは、パイプライン全体のスピードを向上させ、迅速なフィードバックを提供するのに役立ちます。不要にジョブ同士がブロックしないように依存関係を構築することで、パイプラインステージに関係なく、パイプラインを可能な限り高速に実行でき、出力(エラーを含む)をデベロッパーができるだけ早く確認できるようになります。