基本的にCIサーバーには何かをキャッシュする仕組みが準備されていると思います。
ビルドにGradleを使った場合JARのダウンロードに非常に時間がかかる場合があるので、是非ともキャッシュしたいです。
特にSpringを使うと依存関係が多いことがあるので、時間がかかる傾向があります。
今回はkt-zabbix-senderのCircleCIにキャッシュを設定しました。
設定方法
このプロジェクトはdocker-composeを使ってビルド&テストしています。
Gradleでのjarファイル等のダウンロードですがデフォルトだと~/.gradle
ディレクトリに保存されます。
この設定は環境変数にGRADLE_USER_HOME
を設定することで変更できます。
docker-compose.yml
に以下のように設定しました。
抜粋です。
java:
image: circleci/openjdk
environment:
ZABBIX_SERVER: zabbix-server
ZABBIX_WEB: zabbix-web
GRADLE_USER_HOME: /repo/.gradle # この環境変数を追加する
volumes:
- .:/repo
working_dir: /repo
レポジトリのディレクトリをコンテナに/repo
でマウントしているので/repo/.gradle
にダウンロードするように設定します。
CircleCIの設定
次にCircleCIの.ciecleci/config.yml
にキャッシュする設定を追加します。
抜粋です。
- restore_cache: # .graldeのリストアする
key: jar-{{ checksum "build.gradle" }}
- run: # ビルドする(依存ファイルがダウンロードされる)
name: test and build
command: DOCKER_UID=$UID DOCKER_GID=$GID docker-compose run java sh gradlew build
- save_cache: # .gradleを保存する
key: jar-{{ checksum "build.gradle" }}
paths:
- .gradle
結果
実行すると.gradle
がキャッシュされるので二回目以降はキャッシュが展開されるのでビルド時間が早くなると思います。
今回の場合は
1回目(キャッシュなし)は1分42秒かかっていましたが2回目(キャッシュあり)の場合は1分26秒と約15秒ほど早くなりました。
今回のレポジトリは依存関係をそれほど定義していないのですが依存関係が多い場合はそれなりに効果があると思います。