LoginSignup
5

More than 3 years have passed since last update.

posted at

CircleCI のキャッシュキーに Contexts で定義した環境変数を指定する

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 をキャッシュキーに含めるメリット

例えば、固定のプレフィクスをキャッシュキーに含めるパターンでキャッシュを管理する場合、キャッシュをクリアする際に「キャッシュキーの固定プレフィクスを変更して ( v1v2 に変更して ) コミットする」といった手間が発生しますが、Context をキャッシュキーに含めるパターンの場合は CircleCI の設定画面上でキャッシュのクリアが手軽に行えるというメリットがあります。

Context の設定方法

1. Contexts の設定画面で新しい Context を定義する

例として ORGANIZATION_CONTEXT という Context を定義します。
スクリーンショット_2019-03-16_14_22_23.png
スクリーンショット_2019-03-16_14_24_05.png

2. 定義した Context でキャッシュキー用の環境変数を定義する

例として NameCACHE_KEYValuehoghoge という環境変数を定義します。
スクリーンショット_2019-03-16_14_27_06.png
スクリーンショット_2019-03-16_14_52_52.png

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 環境変数が展開されている

hogehoge という環境変数が展開されている。
スクリーンショット_2019-03-16_14_46_38.png

キャッシュをクリアする方法

1. キャッシュキー用の環境変数を削除する

スクリーンショット_2019-03-16_14_27_593.png

2. キャッシュキー用の環境変数を定義する

前回のキャッシュキーとは異なる、NameCACHE_KEYValuefugafuga という環境変数を定義します。
スクリーンショット_2019-03-16_15_12_53.png

3. CircleCI でビルドすると、キャッシュキーの中で新しい CACHE_KEY の環境変数が展開されている

fugafuga という環境変数が展開されている。
スクリーンショット_2019-03-16_15_20_52.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5