- Bitriseドキュメントへようこそ!
- 依存関係とキャッシュ
- リモートビルドキャッシュ
- Gradle のリモート ビルド キャッシュ
Gradle のリモート ビルド キャッシュ
Bitrise リモート ビルド キャッシュを使用すると、ローカル ビルドと CI ビルドの両方に Gradle ビルド キャッシュを利用できます。このソリューションは、Gradle タスクの出力をリモート サーバーにキャッシュします。ビルドを実行するとき、Gradle は出力がリモート キャッシュで利用可能なタスクを実行せず、代わりにキャッシュ エントリをダウンロードします。
Gradle ビルド キャッシュ 他のビルドで生成された出力を再利用することで時間を節約できます。 Bitrise リモート ビルド キャッシュを使用すると、Bitrise と他の CI 環境の両方で CI ビルドに利用できます。
Gradle ビルドは、入力と出力を含む一連のタスクです。 Bitrise は、タスクの出力をパフォーマンスの高いリモート サーバーにキャッシュします。 Gradle ビルドを開始すると、Gradle は出力がリモート キャッシュにあるタスクの実行をスキップし、代わりにキャッシュ エントリをダウンロードして再利用します。
依存関係のキャッシュとビルドのキャッシュ
ビルド キャッシュと依存関係キャッシュは別の概念です。ベスト プラクティスは、ビルド時間を最小限に抑えるために両方を使用することです。続きを読む: Gradle 依存関係のキャッシュ。
キーベースの依存関係キャッシュを使用する
従来の依存関係キャッシュのステップをリモート ビルド キャッシュと組み合わせて使用しないことをお勧めします。代わりに、ビルド キャッシュのみを組み合わせてください。 キーベースの依存関係のキャッシュ。これは、従来の依存関係キャッシュがビルド間でビルド設定を引き継ぐときに発生する可能性のある予期せぬ結果を防ぐためです。
Bitrise CI 環境での Gradle のリモート キャッシュの構成
Bitrise CI 環境では、公式の ステップ Gradle ビルドにリモート ビルド キャッシュを使用します。
Bitrise リモート ビルド キャッシュを使用する場合 ローカルビルドで、まず CI 環境でリモート ビルド キャッシュをアクティブ化する必要があります。
ワークフローエディター
ビットライズ.yml
-
でアプリを開きます ビットライズ。
-
クリック ワークフロー メインページのボタン。
-
で ワークフローとパイプライン ページで、必要なワークフローを見つけます。
-
を追加します。 Gradle の Bitrise ビルド キャッシュをアクティブ化する ワークフローに進みます。
このステップは、次のような Gradle タスクを実行するステップの前にある必要があります。 グラドルランナー また Android ビルド。
-
ビルドでリモート キャッシュを更新する場合は、 新しいキャッシュ エントリをプッシュする に入力する 真実。
-
必要に応じて、キャッシュ エントリの検証を構成します。 検証レベル input は、無効なキャッシュ エントリが見つかった場合に何が起こるかを決定します。
-
オフ: キャッシュ エントリの検証は行われません。
-
警告: 無効なキャッシュ エントリに関する警告を出力しますが、ビルドは中断されません。
-
エラー: 無効なキャッシュ エントリに関するエラーを出力し、ビルドを中断します。
-
-
を開きます。
bitrise.yml
ファイルを追加して、activate-build-cache-for-gradle
ワークフローに進みます。このステップは、次のような Gradle タスクを実行するステップの前にある必要があります。
gradle-runner
またandroid-build
。your-workflow: steps: - git-clone@8: {} - activate-build-cache-for-gradle:
-
ビルドでリモート キャッシュを更新する場合は、
push
に入力する 真実。のデフォルト値
push
のデフォルト値
push
はtrue
。の値を明示的に設定しない場合、push
、ステップは新しいキャッシュ エントリを書き込みます。your-workflow: steps: - git-clone@8: {} - activate-build-cache-for-gradle: inputs: - push: 'true'
-
必要に応じて、キャッシュ エントリの検証を構成します。
validation_level
input は、無効なキャッシュ エントリが見つかった場合に何が起こるかを決定します。-
off
: キャッシュ エントリの検証は行われません。 -
warning
: 無効なキャッシュ エントリに関する警告を出力しますが、ビルドは中断されません。これは入力のデフォルト値です。入力の値を設定しない場合、警告が出力されますが、ビルドは中断されません。 -
error
: 無効なキャッシュ エントリに関するエラーを出力し、ビルドを中断します。
your-workflow: steps: - git-clone@8: {} - activate-build-cache-for-gradle: inputs: - push: 'true' - validation_level: warning
-
他の CI 環境での Gradle のリモート キャッシュの構成
Bitrise Build Cache では Bitrise CI を使用する必要はありません。他の CI/CD サービスを使用しても、リモート キャッシュを活用して Gradle のビルド時間を短縮できます。
これを行うには、ビルド中に Bitrise Build Cache CLI をダウンロードし、CLI を実行して Bitrise Build Cache を有効にするように CI 環境を構成する必要があります。
-
Bitrise でパーソナル アクセス トークンを生成します。 パーソナルアクセストークンの作成。
プロセス中に必要になるため、トークンの値をコピーします。
-
あなたのビットライズを見つけてください ワークスペース ID。これを行うには、ワークスペースのページに移動し、URL で ID を見つけます。
-
CI 構成で次の環境変数を設定します。
-
BITRISE_BUILD_CACHE_AUTH_TOKEN
: 値はパーソナル アクセス トークンである必要があります。 -
BITRISE_BUILD_CACHE_WORKSPACE_ID
: 値は Bitrise Workspace スラグである必要があります。
-
-
高速化するステップの前に、次のスクリプトを CI 構成に追加します。
環境
高速化したい Gradle コマンドと同じ環境でスクリプトを実行してください。たとえば、ビルド全体で複数の Docker コンテナを使用する場合は、Bitrise Build Cache CLI が Gradle コマンドと同じ Docker コンテナで実行されていることを確認してください。
#!/usr/bin/env bash set -euxo pipefail # download Bitrise Build Cache CLI curl -sSfL 'https://raw.githubusercontent.com/bitrise-io/bitrise-build-cache-cli/main/install/installer.sh' | sh -s -- -b /tmp/bin -d # run the CLI to enable Bitrise build cache for Gradle /tmp/bin/bitrise-build-cache enable-for gradle
Gradle 実行理由診断ビルド
Bitrise で Gradle 診断ビルドを実行して、Gradle タスク実行イベントの背後にある理由を調べることができます。これは、リモート キャッシュのキャッシュ ミスを減らすのに役立ちます。
キャッシュ ヒット率は、キャッシュが受信するリクエストの数と比較して、キャッシュが正常に埋めることができるコンテンツ リクエストの数の測定値です。大量のキャッシュ ミスが発生すると、キャッシュを最大限に活用できないため、ビルドが遅くなります。
Gradle タスクを実行する場合、通常、タスク入力の変更によりキャッシュ ミスが発生します。 Gradle の実行理由は、入力の変更が発生した理由を理解し、問題をデバッグするのに役立ちます。
読み続けて、Gradle タスクとそのキャッシュの仕組みの詳細を理解してください。
Bitrise で診断ビルドをセットアップする方法については、次の項目に進んでください。 診断ビルド。
Gradle タスクとキャッシュ
Gradle ビルド システムでは、アクションの基本単位はタスクです。タスクには、クラスのコンパイル、単体テストの実行、または JAR の作成が含まれます。各タスクには、ファイルや環境変数などの独自の入力と出力があります。
タスクは通常、モジュールごとに構成可能な特定のビルド ディレクトリに出力を生成します。このディレクトリの内容は、多くの場合、同じマシン上のビルド間で再利用できます。そのため、Gradle は再利用できないタスクのみを実行することで時間を節約します。他のタスクの場合、ビルド ディレクトリからの出力が再利用され、タスクは UP-TO-DATE
ラベル。このプロセスは Gradle と呼ばれるものです。 インクリメンタルビルド。
増分ビルドと増分タスク実行
増分ビルドは増分タスクの実行とは異なります。増分タスクについて読むことができます Gradleの公式ドキュメント内。
CI 環境での Gradle タスク
CI 環境で Gradle を実行する場合、ビルド ディレクトリが空であるため、すべてのタスクが実行されるか、キャッシュから取得されます。実行後、Gradle はタスク入力に関するメタデータを プロジェクトキャッシュディレクトリ。 Gradle はこのメタデータを使用して、増分ビルドを実行できるようにします。
たとえば、コンパイル タスクの場合、Gradle はソース ファイルのチェックサムを保存し、そのチェックサムに基づいて、変更されたファイルのみを再コンパイルします。 Gradle がタスク入力をチェックする方法の詳細については、 タスクの入力と出力に関する Gradle のドキュメントを読んでください。
メタデータが利用できない場合、Gradle はすべてのタスクを実行します。
タスクのキャッシュ
メタデータがタスクを実行する必要があることを示しており、Bitrise ビルド キャッシュが有効になっている場合、タスクの入力とバージョンなどの特定の Gradle プロパティがキャッシュ キーにハッシュされます。リモートまたはローカル キャッシュのいずれかにキャッシュ キーと一致する場合、タスクを完全に実行する必要はありません。タスクの実行結果はキャッシュからロードされ、 FROM-CACHE
結果ラベル。
リモートまたはローカル キャッシュに一致するキャッシュ キーがない場合 (キャッシュ ミス)、タスクは完全に実行され、その出力はキャッシュに保存されます。
タスクに UP-TO-DATE
ラベルにその理由が記録され、Bitrise の呼び出し詳細のタスクの行に表示されます。考えられる理由としては次のようなものが考えられます。
-
メタデータが欠落している場合は、 利用可能な履歴はありません 表示されています。
-
出力が見つからない場合は、 出力... が削除されました 表示されています。
-
のないタスク
UP-DO-DATE
入力が以前に少なくとも 1 回キャッシュされている場合、ラベルは引き続きキャッシュできます。
診断ビルド
タスクの実行にどのような変更が寄与しているかを理解するには、Gradle メタデータと以前のビルドからのビルド出力が必要です。 CI 環境でそれらを復元すると、ローカルの増分ビルドがシミュレートされ、キャッシュ ミスの原因となるビルド間の変更が表示されます。
これらのビルドは、Bitrise では診断ビルドと呼ばれます。
デバッグ目的のみ
診断ビルドは頻繁に使用されます キーベースのキャッシュ ビルド時間が長くなりました。これらの目的はデバッグであり、日常のワークフローの一部であるべきではありません。
キーベースのキャッシュのアーカイブ制限は 15 GB です。アプリの出力がそれを超える場合は、独自のアーティファクト ストレージ ソリューションを使用して、同じ原理で 2 つの個別のビルドを実行できます。
Gradle 診断ビルドをセットアップして実行するには:
-
次のような CI 構成を作成します。
-
Bitrise Build Cache CLI を使用して、ビルド出力と Gradle メタデータを保存します。
-
ビルド出力とメタデータをキャッシュから復元します。
-
-
初期ビルドを実行して、必要なディレクトリをキーベースのキャッシュに保存します。
-
診断ビルドを実行して、Gradle の実行理由を明らかにします。
診断ビルド用の CI 構成の作成
Gradle 診断ビルドの CI 構成を作成するには、Bitrise ワークフローで、Bitrise Build Cache CLI を使用してビルド出力を保存および復元する 2 つの新しいステップが必要になります。
キーベースのキャッシュを使用しないでください。
診断ビルドではキーベースのキャッシュが使用されますが、この目的には専用のキーベースのキャッシュ手順を使用しないでください。設定 脚本 このガイドで説明されている手順。
ワークフローエディター
ビットライズ.yml
-
診断ビルド用の新しいワークフローを作成します。
を保管する場合は、
bitrise.yml
ファイル あなたのリポジトリ内で新しいブランチを作成し、そのブランチから診断ビルドを実行することをお勧めします。 -
Add the Activate Bitrise Build Cache for Gradle Step to the Workflow.
-
Gradle タスクを実行するステップの後 (たとえば、 Android ビルド)、を追加します 脚本 ステップ。
環境
高速化したい Gradle コマンドと同じ環境でスクリプトを実行してください。たとえば、ビルド全体で複数の Docker コンテナを使用する場合は、Bitrise Build Cache CLI が Gradle コマンドと同じ Docker コンテナで実行されていることを確認してください。
-
へ スクリプトの内容 入力に以下を追加します。
/tmp/bin/bitrise-build-cache save-gradle-output-data
これにより、Gradle メタデータ ディレクトリとビルド出力が、ワークスペース、アプリ、ワークフローに固有のキャッシュ キーの下でキーベースのキャッシュに保存されます。
-
Gradle タスクを実行するステップの前に、別のステップを追加します 脚本 ステップ。
-
へ スクリプトの内容 入力に以下を追加します。
/tmp/bin/bitrise-build-cache restore-gradle-output-data
このステップでは、キャッシュにアクセスし、Gradle ビルド データを復元します。
-
診断ビルド用の新しいワークフローを作成します。
を保管する場合は、
bitrise.yml
ファイル あなたのリポジトリ内で新しいブランチを作成し、そのブランチから診断ビルドを実行することをお勧めします。 -
Add the
activate-build-cache-for-gradle
Step to your Workflow. -
Gradle タスクを実行するステップの後 (たとえば、
android-build
)、を追加しますscript
ステップ。環境
高速化したい Gradle コマンドと同じ環境でスクリプトを実行してください。たとえば、ビルド全体で複数の Docker コンテナを使用する場合は、Bitrise Build Cache CLI が Gradle コマンドと同じ Docker コンテナで実行されていることを確認してください。
-
へ
content
入力、追加:- script: inputs: - content: |- /tmp/bin/bitrise-build-cache save-gradle-output-data
これにより、Gradle メタデータ ディレクトリとビルド出力が、ワークスペース、アプリ、ワークフローに固有のキャッシュ キーの下でキーベースのキャッシュに保存されます。
-
Gradle タスクを実行するステップの前に、別のステップを追加します
script
ステップ。 -
へ
content
入力、追加/tmp/bin/bitrise-build-cache restore-gradle-output-data
:- script: inputs: - content: |- /tmp/bin/bitrise-build-cache restore-gradle-output-data
このステップではキャッシュにアクセスし、Gradle ビルド データを復元します。
構成は次のようになります。
- activate-build-cache-for-gradle: - script: inputs: - content: |- /tmp/bin/bitrise-build-cache restore-gradle-output-data - gradle-runner: inputs: - gradle_options: "--stacktrace --stacktrace" - gradlew_path: "./gradlew" - gradle_task: assembleDebug - script: inputs: - content: |- /tmp/bin/bitrise-build-cache save-gradle-output-data
ディレクトリをキーベースのキャッシュに保存する
初めて Gradle 診断ビルドをセットアップするときは、次のコマンドを使用して初期ビルドを実行する必要があります。 作成された構成 必要なディレクトリをキーベースのキャッシュに保存します。この初期ビルドでは、呼び出しの詳細に実行理由が表示されません。
-
CI 構成が完了したら、ビルドを実行します。
-
ログをチェックして、アップロードが正常に完了したことを確認します。
診断ビルドの実行と確認
後に CI構成が完了しました そして 初期ビルドが正常にアップロードされました 必要なディレクトリをキーベースのキャッシュに追加したら、診断ビルドを実行して、Gradle タスクの実行理由を明らかにできます。必ず最初のビルドと同じワークフローとブランチを使用してください。
診断ビルドを使用すると、Gradle は増分ローカル ビルドであるかのように動作します。
-
ビルドを実行します。
-
開ける 「ビルドキャッシュ」ページ。
-
間で 最新の呼び出し、必要なタスクを見つけます。青いアイコンには、タスクの実行理由を含むタスクが表示されます。
キャッシュ タスクの入力変更やキャッシュ ミスを頻繁に引き起こす CI 構成に関連する変更が表示されます。
これらの理由を適切に解釈してデバッグするには、以下をチェックしてください。 関連する Gradle ドキュメント または私たちのことを掘り下げて デバッグのヒント。