とーますメモ

Ruby on Rails / Goなどの学習メモ

【CircleCI2.0】config.ymlのworking_directoryの設定と、Gemのキャッシュ

working_directoryを設定することで
リポジトリをチェックアウトする場所を設定するが
何も設定しない状態だと、

デフォルトのチェックアウト場所は

「home/circleci/project」

になる。

将来的に複数のプロジェクトを利用するなどの場合を想定すると
それぞれのプロジェクト毎にworking_directoryを設定したほうが良いだろう。

その場合、以下のような設定になるかと思う。

version: 2
jobs:
   build:
     working_directory: ~/my_project
     docker:
        - image: circleci/ruby:2.4.1-node-browsers
     steps:
        - checkout

        - restore_cache:
            name: Restore bundle cache
            key: my_project-{{ checksum "Gemfile.lock" }}

        - run:
            name: Run bundle install
            command: bundle install --path vendor/bundle

        - save_cache:
            name: Store bundle cache
            key: my_project-{{ checksum "Gemfile.lock" }}
            paths:
              - vendor/bundle

        ...

上記の設定の場合だと、リポジトリがチェックアウトされる場所は
「/home/circleci/my_project」になる。

また上記のように設定することで、
gemがキャッシュされ、
CircleCIが回るたびに、「bundle install」が走らなくなる。

ただし注意してほしいのは、必ずbundle installのコマンドには
「-- path vendor/bundle」を設定することと
save_cacheのpathsにvendor/bundleを設定すること。

自分の場合、bundle installに「-- path vendor/bundle」を付けておらず
毎度bundle installが実行され、かなりの時間を無駄にした。