概要
デフォルトでは、すべてのスナップショットのビルドは フルビルド です。クリーンなベースイメージから開始し、すべてのリポジトリをクローンして、すべてのブループリントを毎回最初から実行します。これにより、環境を完全に再現可能にできますが、多数あるブループリントのうち 1 つだけを変更した場合でも時間がかかることがあります。 差分ビルド は、前回成功したビルドのスナップショットを開始点として再利用することで、これを最適化します。実際にブループリントが変更されたワークスペースだけを再ビルドし、変更されていないワークスペースは親ビルドからそのまま引き継ぎます。これにより、特に多数のリポジトリを持つ組織では、ビルド時間を大幅に短縮できます。差分ビルドを有効にする
1
Environment の設定に移動する
Settings > Environment > Advanced に移動します。
2
トグルを有効にする
Differential builds のトグルをオンにします。説明には次のように表示されます: “変更のないワークスペースを再利用することで、ビルドを高速化します。”
3
ビルドをトリガーする
ブループリントの変更を保存するか、Build snapshot をクリックします。有効な親ビルドが存在する場合、次回のビルドでは差分ビルドの実行が試行されます。
仕組み
差分ビルドを有効にした状態でビルドがトリガーされると、システムは次の手順で処理を行います:
- 親ビルドを見つける
システムは、同じプラットフォームおよびマシン構成のスナップショットイメージを持ち、親として利用できる直近の成功ビルド (status が success または partial) を探します。条件を満たす親がない場合、ビルドは自動的にフルビルドに切り替わります。
- ブループリントを比較する
各ワークスペースの構成は親ビルドと比較されます。システムは、ブループリントの内容、アタッチされたファイル、シークレットなどを含む各ワークスペースの入力のダイジェストを計算し、変更点を確認します。
- ワークスペースのアクションを割り当てる
比較結果に基づいて、各ワークスペースには次の 3 つのアクションのいずれかが割り当てられます。
継承されたワークスペースでは、
initialize は再実行されません。maintenance は、
最新のコードを取得したあとでも単独で実行できるよう、自己完結した形で記述してください。
親のスナップショットにすでにインストールされているツールやランタイムは利用できますが、
その直前に initialize が実行されていることを前提にしたり、以前 initialize が
$ENVRC に書き込んだ環境変数に依存したりしてはいけません。
- ビルドを実行する
このビルドはクリーンなベースではなく、親ビルドのスナップショットイメージを基に開始されます。つまり、次のようになります。
- 継承されたワークスペース では、必要なツール、ランタイム、依存関係はすでにインストールされています。システムは最新のコードを取得し (
git pull) 、依存関係を更新するためにmaintenanceコマンドを実行します。 - 再ビルドされるワークスペース は最初からセットアップされ、新たにクローンされたうえで、
initialize+maintenanceの一連の処理がすべて実行されます。 - 削除されたワークスペース では、対応するディレクトリがクリーンアップされます。
initialize をスキップし (それらのツールはすでに親イメージに含まれているため) 、maintenance のみを実行します。
$ENVRC は、差分ビルドを含むすべてのビルドの開始時にリセットされます。
以前のビルドで $ENVRC に書き込まれた環境変数や PATH
エントリは引き継がれません。maintenance でそれらが必要な場合は、
maintenance 側で設定する必要があります。代わりにフルビルドが実行される場合
差分ビルドを有効にしていても、以下の状況ではビルドはフルビルドとして実行されます。- フルビルドを明示的に要求した場合 — Build snapshot ドロップダウンから Full build を選択した場合
- 最新のフルビルドが古すぎる場合 — ブループリントの保存などでトリガーされる自動ビルドは、そのプラットフォームにフルビルドが存在しない場合、または最新のフルビルドが Settings > Environment > Advanced の Full build refresh 間隔 (デフォルトは7日ごと) より古い場合、フルビルドとして実行されます
- 再利用可能な親ビルドが存在しない場合 — 同じプラットフォームおよびマシン構成で、スナップショットイメージを持つ
successまたはpartialのビルドが存在しない場合 - 親ビルドに互換性がない場合 — 親ビルド以降にプラットフォーム、マシン構成、ベースイメージ、または Clone repositories on all platforms の設定が変更された場合、あるいは親ビルドに比較対象となるシークレットのベースラインがない場合
- 組織またはenterpriseの設定が変更された場合 — 親ビルド以降に組織またはenterpriseのブループリント、ブループリントファイル、シークレットが変更された場合
build の種類を確認する
build が完了すると、それが differential build と full build のどちらとして実行されたかを確認できます。- Settings > Environment > Snapshots に移動します
- 履歴内の build をクリックします
- Build kind バッジに Differential (青) または Full build (デフォルト) が表示されます
- Differential: 「変更されたワークスペースのみが再ビルドされ、変更されていないものは同じ設定で最後に成功した build から引き継がれます」
- Full build: 「すべてのワークスペースが最初からビルドされます」
利点
フルビルドを手動でトリガーする
差分ビルドが有効になっている場合でも、Build snapshotボタンからフルビルドを強制できます。ドロップダウンで、デフォルトの差分オプションではなくFull buildを選択してください。 継承された状態を破棄し、ブループリントで引き続き環境をゼロから作成できることを確認するため、定期的にフルビルドを実行することを推奨します。また、スナップショット内に滞留したファイル、ツール、依存関係が残っている可能性のあるセットアップを削除または置き換えた後にも実行してください。フルビルドでは、すべてのinitializeステップとmaintenanceステップが再実行されます。
よくある質問
差分ビルドを有効にすると、セッションに影響しますか?
差分ビルドを有効にすると、セッションに影響しますか?
いいえ。セッションはビルド方法にかかわらず、常に最終スナップショットから起動します。違いはビルド速度だけです。
差分ビルドで問題のあるスナップショットが生成された場合はどうなりますか?
差分ビルドで問題のあるスナップショットが生成された場合はどうなりますか?
Settings > Environment > Snapshots で以前の正常なビルドをピン留めし、その後フルビルドをトリガーしてクリーンなスナップショットを取得してください。差分ビルドを完全に無効にして、フルビルドに戻すこともできます。
部分ビルドは親として扱われますか?
部分ビルドは親として扱われますか?
はい。ステータスが
partial のビルド (一部のワークスペースは成功し、一部は失敗した状態) も親として使用できます。親で成功したワークスペースからのみ継承されます。
