Skip to content
Latchkey

ジョブ依存関係とは何か?パイプライン内でジョブを順序づける

ジョブ依存関係は、ある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を介してデータを前へ運びます。

関連ガイド