紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【CircleCI】Bundle installの結果をキャッシュしてCIを高速化した

はじめに

最近、CIの実行に6分~17分かかるようになっており、開発効率が低下しています。Bundle installの結果をキャッシュすることで3分30秒短縮できたのでメモ。

困っていたこと

CIを構築した前任者が不在であるため、情報が不足していました。

CI実行を少しでも早くするために、依存関係のあるbundle install結果をキャッシュするようにしていたのですが、常に3分30秒かかっており、キャッシュが有効化されているように見受けられませんでした。

f:id:yokoyantech:20201216140231p:plain

repo/venv 配下にキャッシュを生成・取得するようにしていたため、下記ページも参考にしつつ、キャッシュの格納先を vendor/bundle 配下に修正したのですが、状況は変わりませんでした。

circleci.com

キャッシュされない原因

vendor/bundle 配下にキャッシュがないため。同じキーでキャッシュの再作成・上書きはできないため、キャッシュキーを変更し、再度キャシュを再作成する。

実施したこと

キャッシュのキーを修正。v1-dependencies から、 v2-dependencies に変更。

version: 2
jobs:
  build:

    working_directory: ~/repo

    steps:
      - checkout

      # bundlerインストール
      - run:
          name: Configure Bundler
          command: |
            sudo gem update --system $RUBYGEMS_VERSION
            sudo gem uninstall bundler
            sudo rm /usr/local/bin/bundle
            sudo rm /usr/local/bin/bundler
            sudo gem install bundler -v $BUNDLER_VERSION

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v2-dependencies-{{ checksum "Gemfile.lock" }}
          - v2-dependencies-

      - run:
          name: install dependencies
          command: bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs 4 --retry 3

      - save_cache:
          key: v2-dependencies-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle

キャッシュ結果

6秒程度で完了するようになりした!

f:id:yokoyantech:20201216140502p:plain

まとめ

CIの実行時間が3分以上短縮されたため、開発効率が上がりました。CIがボトルネックになるのは非常にもったいないため、これからもできる限り高速化していきたいと思います。