Build Cache

現在、この機能は、Incredibuild のEnterprise、および、Business Plans でのみ利用可能で、限定的に提供されています。詳しくは、カスタマーサクセスマネージャーにご相談ください。

概要

Build Cacheは、過去の出力の一部を再利用することで、時間とリソースを節約します。ビルドを実行ごとに、その出力をキャッシュに保存します。今後ビルドを実行する際には、変更のない部分を再生成しないよう、キャッシュを確認します。

これは大きなインパクトがあり、ローカルマシンに保存されている過去のビルドデータを再利用することで、帯域に影響を与えることなくビルド時間を大幅に短縮することができます。

Build Cacheには追加のリソースが必要で、特定のシステム要件が含まれます。

対応ツール

  • Build cacheは、msvcツールセット(cl.exe、link.exe)を使用したビルドをサポートし、Visual Studio 2017以降に対応しています。

  • clang-cl.exe向けのサポートは、現在、ベータ版の機能となっています。

Build CacheとHelper Cacheの違いについて

Helperにタスクが与えられると、処理に必要なファイルがHelper Cacheに保存されます。全く同じファイルが送られてきた場合でも、Helperは再度処理を行いますが、ファイルの再転送は必要ありません。

Build Cacheでは、すでに処理されたタスクをInitiatorが認識し、それらのタスクは完全に省略されます(ファイルの再転送やタスクの再実行は不要です)。

メリットとユースケース

  • 場所を選ばずに、開発者の生産性を向上させる
    ブランチを切り替えるたびに、すでにビルドされている場合でも、はじめからのビルドの実行を中断します。Build Cacheは、過去のビルドデータを保存し、ローカルビルド時間を大幅に短縮することができます。

  • スピードに影響を与えることなく、自宅からビルドすることが可能
    自宅での作業は、アップストリームの帯域幅が制限されるため、構築速度に影響します。Build Cacheは、下流の帯域幅に更に依存することができ、新しいビルドを開始する際に、より高速でより良いパフォーマンスを提供します。

  • CIビルドの間にキャッシュされたデータを使用する
    Build Cacheを使用して、ひとつのCIサーバーで生成されたビルドアーティファクトを別のCIサーバーと共有し、時間とリソースを節約します。CIに対する構築体験が逐次向上します。

  • CI結果を再利用して開発ビルドを高速化
    バージョン管理からビルドを再開する際に、変更点をすべて取り込む必要があります。しかし、Build Cacheを使うことで、以前のバージョンで作業していても、後のCIビルドやワークフローで生成されたアウトプットを再利用することが可能です。

Build Cacheクライアント、エンドポイント、およびキャッシュロケーション

Build Cacheは、Build Cache エンドポイント に保存・管理されます。Build Cache エンドポイントは、どのIncredibuild Agentでもホストすることができます。Build Cache にアクセスするイニシエータエージェント は、Build Cache クライエント と呼ばれます。エンドポイントとクライアントは、同じAgent上で利用することができます。

クライアントがキャッシュに寄与するのか、キャッシュから読み取るのかを定義することができます。

クライアントは、デフォルトで使用する単一エンドポイントを定義しますが、このビルドで異なるエンドポイントを使用する場合、ビルドコマンドでこれを上書きすることができます。Make and Build Tools向けBuildConsoleVisual Studio向けBuildConsoleDevTools向けIBConsole CLIでビルドキャッシュのエンドポイントを上書きできるようにフラグが定義されています。

例えば、BuildConsoleコマンドでmakeやbuildツールのIncredibuildを実行する場合、/buildcacheserver=[ipアドレス:ポート]フラグを追加することになります。

Build Cache エンドポイントは、既定値ではBuild Cache クライエントのローカルホストです。これをローカルの Build Cacheを使用する、と言います。

共有 Build Cache を実装するには、同じ エンドポイントに接続する複数のクライエントを割り当てます。

デプロイの事例

クライアントがエンドポイントに接続する方法に応じて、さまざまな方法でBuild Cacheをデプロイすることができます。1つのクライアントが独自のエンドポイントとして機能したり(ローカル)、複数のクライアントが1つのエンドポイントに接続したり(共有)、より複雑で動的なデプロイも可能です。

Build Cacheはどのように機能するのか?

多くの場合、コード内の依存関係に基づき、ツリー状の構造でビルドが処理されます。レイヤー 1 のファイルはレイヤー 2 のファイルを作成するために、レイヤー 2 はレイヤー 3 のファイルを作成するため、と、最終的な出力が生成されるまで同様に使用されます。

ビルドが処理されると、Incredibuild は今後使用するためにプロセスの詳細を保存します。他のファイルから生成された各処理部分は、入力ファイルと出力ファイルのペアとしてキャッシュに保存されます。幾つかのファイルを変更してからビルドを実行した場合、Build Cacheは同一部分を再利用して、プロセスの一部を実行しないようにすることができます。

Agentの設定で、Agentがキャッシュに寄与するのか、キャッシュから読み取るのかを定義することができます。ただし、各エンドポイントは、一度に1つのビルドからのコンテンツしか処理することができません。2つのビルドが同じエンドポイントに同時に書き込もうとすると、最初のビルドのコンテンツのみがキャッシュに追加されます。

ファイルキャッシュのサイズとクリーニング

Agent 設定> Build Cache エンドポイント > File Cache > サイズ制限 の設定で、各 エンドポイント のファイルキャッシュの大きさを定義します。サイズ制限は、このファイルキャッシュに寄与するすべてのビルドの出力の2~3倍のサイズで設定されるべきですが、要件は環境に応じて異なる場合があります。

重複ファイルの削除や自動クリーンアップなどの、さまざまな方法でファイルキャッシュを最適化します。ファイルキャッシュの空きが無くなると、コンテンツの40%程度を削除して自動的にクリーンアップします。Build CacheエンドポイントのAgent 設定では、手動でキャッシュを削除することも可能です。

キャッシュの使用量は、コマンドラインで表示される出力と同様に、ビルドモニター の出力タブで確認することができます。

Build Cache ライセンスの割り当て方法

Build Cacheを使用するすべてのイニシエータに、特別なBuild Cacheライセンスを割り当てる必要があります。

  1. Coordinator > Agent List にアクセスしてください。

  2. Build Cacheを有効にしたいイニシエータエージェントをすべて選択します。

  3. Actions >Build Cache License >Allocate License をクリックします。

注意 : また、各エージェントの隣にあるオプション (...)メニューを使用して、1つのイニシエータにライセンスを割り当てることもできます。

Build Cacheクライアントの設定方法

既定値では、Build Cacheのライセンスが割り当てられる同時に、Agentは自動的にBuild Cacheクライアントとして設定されます。Build Cacheクライアントの設定は、Agent 設定> Build Cache クライアント > 一般 タブで編集することができます。

エンドポイントフィールドでは、既定値で使用するエンドポイントを定義します。ビルドコマンドでこれを上書きして、別のエンドポイントを使用することも可能です。

デフォルトでは、Build Cacheを有効にするすべてのAgentは、クライアントとしてだけでなくコントリビューター(貢献者)としても機能します(クライアントで実行されたビルドがビルドキャッシュの一部として保存されることを意味します)。特定のAgentに貢献させたくない場合は、Cache contributor オプションを無効にしてください。

ベストプラクティスとして、時間の経過とともに変化が少ないビルドはキャッシュの有用度が高く、動的なビルドは有用度が低くなります。これを一般的に適用すると、CIパイプラインはキャッシュコントリビューター、開発者マシンはキャッシュリーダー(キャッシュコントリビューターとしては無効)となるはずです。

ビルドアウトプットに以下の詳細を含める チェックボックスを使用して、詳細情報を含めたコマンドラインとビルドモニタの出力を引き上げることができます。

Build Cacheのエンドポイントの設定方法

  1. イニシエータマシンで、Agent設定 > Build Cacheエンドポイント >一般 に進み、サービスが現在実行中であることを確認します。

  2. データベースはIncredibuildのインストール時に自動的にインストールされます。フォルダに認証情報が必要な場合は、ここで認証情報を指定します。

  3. File Cacheのサイズを定義します。フォルダに認証情報が必要な場合は、ここで認証情報を指定します。

  4. また、コーディネーターのAgentリストで、フォルダーとファイルのキャッシュサイズを変更することができます。イニシエータエージェント を選択し、オプションメニューを開き、Build Cache Configuration を選択します。これは、複数のエージェントを選択し、アクションメニューを使用することで、大規模に行うことができます。

Build Cacheの効果を検証する

Build Cacheを使用することでどれだけ時間が短縮されたか、についての詳細は、すべてのビルドの出力に含まれます。これは、コマンドラインで見る出力と同様に、ビルドモニター の出力タブで見ることができます。

ビルドモニターのグラフで情報を確認することもできます。

  • キャッシュのタスク は実行済みタスクで、今後のビルド向けのビルドキャッシュに追加する候補となるタスクです。

  • ヒットしたキャッシュ は、実行されずに Build Cache から取得されたタスクです。