Skip to main content

ビルドでキーベースのキャッシュを使用する

概要

キーベースのキャッシュでは、キャッシュ アーカイブを識別するキーを定義する必要があります。キーは静的または動的に生成でき、キーでテンプレートを使用できます。構成を必要としない依存関係マネージャー専用のキーベースのキャッシュ ステップがあります。

キーベースのキャッシュには、一緒に使用する必要がある 2 つのステップが必要です。

  • キャッシュを保存: ビルド ファイルをキーで識別されるキャッシュ アーカイブに保存します。

  • キャッシュを復元: キーで識別されるキャッシュ アーカイブにビルド ファイルを復元します。

専用のキーベースのキャッシュ 手順

次のような専用のキーベースのキャッシュ手順を使用できます。 NPM キャッシュを保存、npm または yarn の依存関係をキャッシュします。

専用のキーベースのキャッシュ手順の完全なリストについては、こちらをご覧ください 依存関係マネージャーの専用キャッシュ手順.

どちらのステップも、キー文字列を介してキャッシュ アーカイブにアクセスします。これらのキーは、 キャッシュキー ステップ入力;各キーは個別のキャッシュ アーカイブを識別します。

Cache retention and eviction policy

キャッシュ エントリは、最後の使用から 7 日間保持されます。ワークフローで 7 日間連続して使用されない場合、それらは自動的に削除されます。

キャッシュ ストレージの許容量が不足すると、アプリの LRU (Least Recent Used) キャッシュ エントリは、作成された新しいキャッシュ エントリに置き換えられます。 LRU は、新しいデータ用のスペースを確保するために、使用頻度が最も低いデータを削除するキャッシュ置換アルゴリズムです。これは、置換されたキャッシュ エントリがワークフローで必要な場合、キャッシュ ヒット率が低下する可能性があることを意味する場合があります。にアップグレードすることをお勧めします より高い計画 ワークフローで必要となる可能性のあるキャッシュ エントリを失わないように、より多くのストレージを取得します。

新しいキャッシュ アーカイブの作成

  1. 追加 キャッシュを保存 ワークフローの最後に進みます。

  2. の中に キャッシュキー 入力、キャッシュ キーを定義します。このキーは、キャッシュ アーカイブを識別するために使用されます。

    主な制限事項

    キャッシュ キーの最大長は 512 文字です (それより長いキーは切り捨てられます)。キーにコンマ (,) を使用することはできません。

    使用できます テンプレートと関数 ビルド環境やその他の要因に応じて変化する動的キーを作成します。

    複数のキーを指定できます。ステップはそれらを順番に評価し、最初のものと一致させます。続きを読む: キャッシュ アーカイブのキー マッチング

    動的キーによる条件付きキャッシュ

    ビルド中にコンテンツが変更されていない場合、キャッシュのアーカイブとアップロードを自動的にスキップできるようにステップを構成できます。 動的キーでの条件付きキャッシュの使用.

    例1 OS を参照するキーを使用して新しいキャッシュ アーカイブを作成する

    この例では、ビルド マシンのオペレーティング システムの種類を参照するキーを持つキャッシュ アーカイブを作成しています。

    - save-cache@1:
        inputs:
        - key: |-
            npm-cache-{{ .OS }}

  3. の中に キャッシュへのパス 入力、キャッシュするファイルとフォルダーを定義します。

    入力ではワイルドカードを使用できます。 ***.入力値は実行時に評価されます。

    アーカイブのサイズ制限

    1 つのキャッシュ アーカイブのサイズは 15 GB を超えることはできません。

    例2 node_modules フォルダーにすべてのファイルとフォルダーを再帰的にキャッシュする
    - save-cache@1:
        inputs:
        - key: |-
            npm-cache-{{ .OS }}
        - paths: node_modules/

キャッシュ アーカイブが作成されると、 アプリの設定 ページ: ビルド外のキーベースのキャッシュ アーカイブの管理.

既存のキャッシュ アーカイブの復元

Linux スタックと Mac スタックで実行されているビルド間でキャッシュ アーカイブを共有することはできません

Linux ベースのスタックに保存されたキャッシュ アーカイブは、Linux マシンで実行されているビルドでのみ復元できます。同様に、Mac ビルドは、Mac ビルドで以前に保存されたキャッシュのみを復元できます。キャッシュの復元手順が「指定されたキーが存在しません」で失敗します。ビルドが別の OS に保存されたキャッシュ アーカイブを復元しようとすると、エラーが発生します。

キャッシュ アーカイブは、同じ OS の異なるバージョンのスタック間 (たとえば、異なる Xcode スタック間) で共有できます。

  1. 追加 キャッシュを復元 ワークフローの最初に進みます。

  2. の中に キャッシュキー 入力に、復元するキャッシュのキーを入力します。

    使用できます テンプレートと関数 ビルド環境やその他の要因に応じて変化する動的キーを作成します。

    複数のキーを指定できます。ステップはそれらを順番に評価し、最初に一致するものを選択します。続きを読む: キャッシュ アーカイブのキー マッチング.

    例3 2 つのキーのいずれかからのキャッシュ アーカイブの復元

    この例では、次の 2 つのキーのいずれかを復元しています。

    • まず、現在のワークフローの名前を含むキーを持つキャッシュ アーカイブを探します。たとえば、現在のワークフローの名前が primary、ステップはキーを持つアーカイブを探します npm-cache-primary.

    • 次に、現在のブランチの名前を含むキーを持つアーカイブを探します。たとえば、現在のブランチの名前が main、ステップはキーを持つアーカイブを探します npm-cache-main.

    - restore-cache@1:
        inputs:
        - key: |-
            npm-cache-{{ .Workflow }}
            npm-cache-{{ .Branch }}
    

キーベースのキャッシング テンプレートと関数

どちらのキーベースのキャッシング ステップも、ステップ入力でのテンプレート要素の使用をサポートしています。ステップは実行時にキー テンプレートを評価し、使用される最終的なキャッシュ キーは、ビルド環境またはリポジトリ内の特定のファイルに応じて変わる可能性があります。

利用可能なキャッシング テンプレート

表1 キーベースのキャッシング テンプレート

テンプレート式

意味

可能な値

cache-key-{{ .Branch }}

ビルドが実行されている現在の git ブランチ。

アプリの既存のブランチの正確な名前。

cache-key-{{ .CommitHash }}

ビルドが実行される git コミットの SHA-256 ハッシュ。

既存のコミット ハッシュ。

cache-key-{{ .Workflow }}

現在の Bitrise ワークフロー名 (例: primary)。

アプリの既存のワークフローの正確な名前。

{{ .OS }}-cache-key

ビルド スタックの現在のオペレーティング システム (linux また darwin)。

  • linux: Linux ベースのスタックの場合。

  • darwin: macOS ベースのスタックの場合。


テンプレートのキャッシュでの関数の使用

キーベースのキャッシュ テンプレートは、次の 2 つの異なる関数の使用をサポートしています。

  • checksum: この関数は、1 つ以上のファイルの内容の SHA-256 チェックサムを計算します。これは、キャッシュするコンテンツを記述するファイルに基づいて一意のキャッシュ キーを作成する場合に役立ちます。 例1「チェックサム機能の使用.

  • getenv: この関数は、 環境変数 (Env Var) または変数が定義されていない場合は空の文字列。 例2「getenv 関数の使用

例1 チェックサム機能の使用

使用 checksum のチェックサムを計算するキーを作成する関数 package-lock.json ファイル:

- save-cache@1:
    inputs:
    - key: npm-cache-{{ checksum "package-lock.json" }}
    - paths: node_modules

使用 checksum 任意のチェックサムを計算するキーを作成する関数 .gradle ファイルと gradle.properties ファイル:

- save-cache@1:
    inputs:
    - key: gradle-cache-{{ checksum "**/*.gradle*" "gradle.properties" }}
    - paths: AndroidApp

例2 getenv 関数の使用

使用 getenv の値を含むキーを作成する関数 BITRISE_BUILD_NUMBER 環境変数。

- save-cache@1:
    inputs:
    - key: npm-cache-{{ getenv "BITRISE_BUILD_NUMBER" }}
    - paths: node_modules

キャッシュ アーカイブのキー マッチング

で複数のキーを定義することができます。 キャッシュキー キーベースのキャッシング手順の入力。 1 行に 1 つのキーをリストすることで、追加のキーを指定できます。リストは優先順位に従っているため、Step は最初に指定した最初のキーに一致するものを見つけようとします。そのキーにキャッシュが保存されていない場合は、2 番目のキーに一致するものを見つけようとします (したがって、の上)。

inputs:
  key: |
    key-1
    key-2
    key-3

複数のキーを一覧表示するだけでなく、各キーを保存されたキャッシュ キーのプレフィックスとして使用しても、一致するキャッシュ アーカイブを取得できます。たとえば、キー my-cache- キーで保存された既存のアーカイブと一致できます my-cache-a6a102ff.最初のキーがチェックサム キーと完全に一致するようにキーを構成し、より一般的なプレフィックス キーをフォールバックとして使用することをお勧めします。

inputs:
  key: |
    npm-cache-{{ checksum "package-lock.json" }}
    npm-cache-

動的キーでの条件付きキャッシュの使用

ビルドを実行するたびにキャッシュ アーカイブを更新したくない場合があります。キャッシュをスキップすると、次のことが可能になります。

  • 正しくない可能性のあるビルド データをキャッシュに保存しないようにします。

  • PR 検証ワークフローを高速化します。

  • 保存および転送されるデータの量を制限します。

キャッシュされたコンテンツがビルド中にまったく変更されなかった場合、 キャッシュを保存 ステップは、キャッシュの圧縮とアップロードを自動的にスキップできます。これを機能させるには、キャッシュのコンテンツが変更されるたびに変更される一意のキャッシュ キーがキャッシュ アーカイブにあることを確認する必要があります。実際には、これには チェックサム付きの動的キー キャッシュされたコンテンツを記述するファイル。チェックサムは、ファイルの内容に基づいて計算されます。ファイルが変更されていない場合は、チェックサムも変更されません。

この機能を利用できるようにステップを構成することを強くお勧めします。以下の手順に従うか、スキップして YAML の例.

キャッシュの保存ステップを完全にスキップする

キャッシュされるコンテンツが変更された場合でも、キャッシュ アーカイブを更新したくない場合は、次のいずれかを削除できます。 キャッシュを保存 ワークフローからステップするか、ステップの条件を設定できます。 ステップを条件付きで有効または無効にする.

  1. でアプリを開きます ビットライズ

  2. クリック ワークフロー メインページのボタン。

    opening-workflow-editor.png
  3. ワークフローを開き、 キャッシュを保存 ステップ。

  4. をセットする 一意のキャッシュ キー への入力 真実.

    入力が 間違いステップは引き続きキャッシュのアップロードをスキップできますが、最初にキャッシュ アーカイブを作成してチェックサムを計算する必要があります。これには時間がかかります。

  5. の中に キャッシュキー 入力、キャッシュされたコンテンツを記述するファイルのチェックサムを含むキーを作成します。

    例えば、 npm-cache-{{ checksum "package-lock.json" }} は、変更されない限り変更されない動的キーです。 package-lock.json ファイルは変更されません。

  6. 同じ動的キーを キャッシュキー の入力 キャッシュを復元する ステップ。

すべてが正しく構成されている場合、2 つのキャッシュ ステップのキーが一致すると、キャッシュ アーカイブは更新されません。

例1 チェックサム付きの動的キーを使用する YAML の例

この例では、キャッシュ キーはすべての合計を計算します。 .gradle ファイルと gradle.properties ファイル。両方の キャッシュを復元する そしてその キャッシュを保存 ステップは同じキャッシュ キーを探します。

workflows:    
  caching:      
    steps:      
    - restore-cache@1:          
        inputs:          
        - key: gradle-cache-{{ checksum "**/*.gradle*" "gradle.properties" }}      
    - save-cache@1:          
        inputs:          
        - key: gradle-cache-{{ checksum "**/*.gradle*" "gradle.properties" }}          
        - is_key_unique: 'true'