buildオーケストレーションとは? jobとpipelineの調整
buildオーケストレーションは、job、その依存関係、pipeline全体を調整し、作業を正しい順序で正しいマシン上で実行させることです。
数十のjob、依存関係、並列branch、downstream triggerを持つpipelineは、勝手には動きません。buildオーケストレーションは、それらすべてを調整するレイヤーです。今何を実行するか、何を待たせるか、各jobをどこへ送るか、結果がどう流れるかを決めます。これが、jobの寄せ集めと、機能するpipelineの違いです。
オーケストレーターが調整するもの
- 順序: 依存関係を通じて、どのjobがどのjobより先に走るか。
- 配置: 各jobをどのエージェントが実行するか。
- 並列性: 同時に実行できるものは何か。
- データフロー: job間でoutputやartifactを渡すこと。
グラフのスケジューリング
オーケストレーターは依存関係グラフ (DAG) を読み、各jobの前提条件が終わりエージェントが空くとすぐにそのjobをスケジュールします。すべての順序制約を尊重しつつ、安全な並列性を最大化します。
簡単な例
build -> (lint, test) -> deploy が与えられると、オーケストレーターはbuildを実行し、次にlintとtestを並列で起動し、testが完了したらdeployを実行します。各jobは、実行可能になった時点で空いているエージェントに割り当てられます。
pipelineをまたぐオーケストレーション
オーケストレーションは1つのpipeline内だけのものではありません。downstream pipelineのtrigger、親子構造の調整、プロジェクト間buildの連鎖は、すべてより大きなスケールのオーケストレーションです。
オーケストレーションとキャパシティ
オーケストレーターは、エージェントがある分しか並列実行できません。エージェントが不足すると、実行可能なjobがキューに溜まり、オーケストレーションが停滞します。マネージドrunner (Latchkey) はオンデマンドのキャパシティを供給するため、オーケストレーターの並列計画が実際に並列で実行されます。
重要なポイント
- buildオーケストレーションは、jobの順序、配置、並列性、データフローを調整します。
- 依存関係グラフをスケジュールし、安全な並列性を最大化します。
- pipelineをまたぎ、downstreamや親子のrunを連鎖もさせます。