ジョブ依存関係とは何か?パイプライン内でジョブを順序づける
ジョブ依存関係は、あるjobが(通常は成功して)完了してから別のjobが開始できることをパイプラインに伝えます。
パイプライン内のjobはデフォルトでは並列に実行されることが多いですが、順序を持つものもあります。テストの前にビルドが必要で、デプロイの前にテストが必要です。ジョブ依存関係はその順序を表現します。どのjobがどれに依存するかを宣言することで、平坦なjobのリストを、パイプラインが正しくスケジュールできる構造化されたグラフに変えます。
依存関係が作業をどう順序づけるか
jobのBがjobのAに依存する時、パイプラインはAが成功して終わるまでBを保留します。互いに依存関係のないjobは同時に実行して構いません。依存関係の集合が実行順序全体を定義します。
依存関係はグラフを作る
十分な依存関係を積み重ねると、有向非巡回グラフが得られます。ノードはjob、エッジは依存関係です。パイプラインは、すべての前提条件が完了するとすぐに各jobを実行し、安全な並列性を最大化します。
簡単な例
GitHub Actionsでは、testのjobの needs: [build] はそれをbuildの待機にします。needs: [test] を持つdeployのjobはtestを待ちます。互いに needs のない2つの独立したtestのjobは並列に実行されます。
依存関係に沿ってデータを渡す
- outputs: jobが依存先の読む値を公開する。
- artifacts: jobがファイルをアップロードし、後のjobがダウンロードする。
- 依存関係のエッジは両方のチャンネルです。
依存関係と速度
すべての依存関係は並列実行の機会を1つ奪うため、長い依存関係のチェーンは長いパイプラインです。本当に必要な依存関係だけを宣言することで、グラフを広く高速に保てます。
重要なポイント
- ジョブ依存関係は、あるjobを別のjobの開始前に終わらせます。
- 依存関係は、安全な並列実行順序を定義するグラフを形成します。
- またjobのoutputsやartifactを介してデータを前へ運びます。
関連ガイド
What Is a Directed Acyclic Graph in CI? Modeling Job OrderA directed acyclic graph (DAG) models pipeline jobs as nodes and dependencies as edges with no cycles. Learn…
What Is the Critical Path of a Pipeline? The Longest ChainThe critical path of a pipeline is the longest chain of dependent jobs, which sets the minimum possible run t…
What Is Pipeline Parallelism? Running Jobs at the Same TimePipeline parallelism runs independent jobs at the same time instead of one after another, cutting wall-clock…