CircleCI のビルド時にライブラリの依存関係をキャッシュする際に指定するキーとして、キーの先頭に v1
のような固定のプレフィクスを付与してキャッシュを管理する方法がありますが、以下のように Contexts で定義した環境変数を指定して、キャッシュキーをハードコードせずにキャッシュキーを管理する方法もあります。
# プレフィクスをキーに含めるパターン
- restore_cache:
keys:
- v1-bundler-cache-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
- v1-bundler-cache-{{ .Branch }}
- v1-bundler-cache-
# Context をキーに含めるパターン
- restore_cache:
keys:
- bundler-cache-{{ .Environment.CACHE_KEY }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
- bundler-cache-{{ .Environment.CACHE_KEY }}-{{ .Branch }}
- bundler-cache-
Context をキャッシュキーに含めるメリット
例えば、固定のプレフィクスをキャッシュキーに含めるパターンでキャッシュを管理する場合、キャッシュをクリアする際に「キャッシュキーの固定プレフィクスを変更して ( v1
を v2
に変更して ) コミットする」といった手間が発生しますが、Context をキャッシュキーに含めるパターンの場合は CircleCI の設定画面上でキャッシュのクリアが手軽に行えるというメリットがあります。
Context の設定方法
1. Contexts の設定画面で新しい Context を定義する
例として ORGANIZATION_CONTEXT
という Context を定義します。
2. 定義した Context でキャッシュキー用の環境変数を定義する
例として Name
に CACHE_KEY
、Value
に hoghoge
という環境変数を定義します。
3. CircleCI 設定ファイル ( .circleci/config.yml
) のキャッシュキーとして、 (2) で定義した環境変数を指定する
.circleci/config.yml
の記述例
test:
executor:
name: default
steps:
- checkout
- restore_cache:
keys:
- bundler-cache-{{ .Environment.CACHE_KEY }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
- bundler-cache-{{ .Environment.CACHE_KEY }}-{{ .Branch }}
- bundler-cache-
- run:
name: bundle install
command: bundle install --path vendor/bundle
- save_cache:
key: bundler-cache-{{ .Environment.CACHE_KEY }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
paths:
- ./vendor/bundle
workflows:
test-workflow:
jobs:
- test:
context: ORGANIZATION_CONTEXT # (1) で定義した Context を test ジョブの中で展開する
4. CircleCI でビルドすると、キャッシュキーの中で CACHE_KEY
環境変数が展開されている
キャッシュをクリアする方法
1. キャッシュキー用の環境変数を削除する
2. キャッシュキー用の環境変数を定義する
前回のキャッシュキーとは異なる、Name
に CACHE_KEY
、Value
に fugafuga
という環境変数を定義します。