メインコンテンツへスキップ

概要

デフォルトでは、すべてのスナップショットのビルドは フルビルド です。クリーンなベースイメージから開始し、すべてのリポジトリをクローンして、すべてのブループリントを毎回最初から実行します。これにより、環境を完全に再現可能にできますが、多数あるブループリントのうち 1 つだけを変更した場合でも時間がかかることがあります。 差分ビルド は、前回成功したビルドのスナップショットを開始点として再利用することで、これを最適化します。実際にブループリントが変更されたワークスペースだけを再ビルドし、変更されていないワークスペースは親ビルドからそのまま引き継ぎます。これにより、特に多数のリポジトリを持つ組織では、ビルド時間を大幅に短縮できます。

差分ビルドを有効にする

1

Environment の設定に移動する

Settings > Environment > Snapshots に移動します。
2

トグルを有効にする

Differential builds のトグルをオンにします。説明には次のように表示されます: “変更のないワークスペースを再利用することで、ビルドを高速化します。”
3

ビルドをトリガーする

ブループリントの変更を保存するか、Build snapshot をクリックします。有効な親ビルドが存在する場合、次回のビルドでは差分ビルドの実行が試行されます。
差分ビルドを有効にした直後の最初のビルドは、必ず フルビルド になります。これは、比較対象として正常に作成されたベースラインスナップショットが必要なためです。それ以降のビルドは、有効な親が存在する限り差分ビルドになります。

仕組み

差分ビルドを有効にした状態でビルドがトリガーされると、システムは次の手順で処理を行います:

1. 親ビルドを見つける

システムは、親として利用する直近の成功ビルド (status が success または partial) を探します。条件を満たす親がない場合、ビルドは自動的にフルビルドに切り替わります。

2. ブループリントを比較する

各ワークスペースの構成は親ビルドと比較されます。システムは、ブループリントの内容、アタッチされたファイル、シークレット、リポジトリの順序などを含む各ワークスペースの入力のダイジェストを計算し、変更点を確認します。

3. ワークスペースのアクションを割り当てる

比較結果に基づいて、各ワークスペースには次の 3 つのアクションのいずれかが割り当てられます。
Action内容使用するタイミング
Rebuildリポジトリをクローンし、すべてのブループリントのステップ (initialize + maintenance) を最初から実行する親のビルド以降にブループリントが変更された場合
Inherit最新のコードを取得し、maintenance ステップのみを実行するブループリントに変更がない場合 — 親のセットアップを再利用する
Removeスナップショットからワークスペースを削除するワークスペースが構成から削除された場合
継承されたワークスペースでは、initialize は再実行されません。maintenance は、 最新のコードを取得したあとでも単独で実行できるよう、自己完結した形で記述してください。 親のスナップショットにすでにインストールされているツールやランタイムは利用できますが、 その直前に initialize が実行されていることを前提にしたり、以前 initialize$ENVRC に書き込んだ環境変数に依存したりしてはいけません。

4. ビルドを実行する

このビルドはクリーンなベースではなく、親ビルドのスナップショットイメージを基に開始されます。つまり、次のようになります。
  • 継承されたワークスペース では、必要なツール、ランタイム、依存関係はすでにインストールされています。システムは最新のコードを取得し (git pull) 、依存関係を更新するために maintenance コマンドを実行します。
  • 再ビルドされるワークスペース は最初からセットアップされ、新たにクローンされたうえで、initialize + maintenance の一連の処理がすべて実行されます。
  • 削除されたワークスペース では、対応するディレクトリがクリーンアップされます。
組織ブループリントとEnterpriseブループリントでは、差分ビルド中は initialize をスキップし (それらのツールはすでに親イメージに含まれているため) 、maintenance のみを実行します。
$ENVRC は、差分ビルドを含むすべてのビルドの開始時にリセットされます。 以前のビルドで $ENVRC に書き込まれた環境変数や PATH エントリは引き継がれません。maintenance でそれらが必要な場合は、 maintenance 側で設定する必要があります。

フルビルドが実行されるケース

差分ビルドが有効でも、次のような場合はシステムがフルビルドにフォールバックします。
  • 親ビルドが存在しない — 初回ビルドであるか、過去のビルドがすべて失敗している
  • 組織またはEnterpriseブループリントが変更された — グローバルな変更はすべてのワークスペースに影響するため、クリーンな再ビルドのほうが安全です
  • リポジトリの順序が変更された — リポジトリ同士でセットアップに依存関係がある場合があるため、順序を変更するとフル再ビルドがトリガーされます
  • 親ビルドが古すぎる、または互換性がない — システムは親ビルドが適切かどうかを検証します
フォールバックが発生すると、ビルド詳細ページのビルド種別バッジの下にその理由が表示されます。

build の種類を確認する

build が完了すると、それが differential build と full build のどちらとして実行されたかを確認できます。
  1. Settings > Environment > Snapshots に移動します
  2. 履歴内の build をクリックします
  3. Build kind バッジに Differential (青) または Full build (デフォルト) が表示されます
バッジにカーソルを合わせると、各種類の意味を説明するツールチップが表示されます。
  • Differential: 「変更されたワークスペースのみが再ビルドされ、変更されていないものは同じ設定で最後に成功した build から引き継がれます」
  • Full build: 「すべてのワークスペースが最初からビルドされます」

利点

利点説明
ビルドの高速化変更されたワークスペースのみが完全なセットアップ処理の対象になります。継承されたワークスペースでは、initialize は完全にスキップされます。
ネットワーク使用量の削減変更のないワークスペースでは、ツール、ランタイム、大容量の依存関係を再ダウンロードする必要がありません。
反復作業の高速化1 つのリポジトリのブループリントを繰り返し調整しても、ほかのリポジトリがビルドの足かせになることはありません。
同等の信頼性問題があると判断された場合、システムは自動的にフルビルドにフォールバックします。必要に応じて、いつでも手動でフルビルドをトリガーすることもできます。

フルビルドを手動でトリガーする

差分ビルドが有効になっている場合でも、Build snapshotボタンからフルビルドを強制できます。ドロップダウンで、デフォルトの差分オプションではなくFull buildを選択してください。 継承された状態を破棄し、ブループリントで引き続き環境をゼロから作成できることを確認するため、定期的にフルビルドを実行することを推奨します。また、スナップショット内に滞留したファイル、ツール、依存関係が残っている可能性のあるセットアップを削除または置き換えた後にも実行してください。フルビルドでは、すべてのinitializeステップとmaintenanceステップが再実行されます。

よくある質問

いいえ。セッションはビルド方法にかかわらず、常に最終スナップショットから起動します。違いはビルド速度だけです。
Settings > Environment > Snapshots で以前の正常なビルドをピン留めし、その後フルビルドをトリガーしてクリーンなスナップショットを取得してください。差分ビルドを完全に無効にして、フルビルドに戻すこともできます。
はい。ステータスが partial のビルド (一部のワークスペースは成功し、一部は失敗した状態) も親として使用できます。親で成功したワークスペースからのみ継承されます。