CI

CircleCIでGradleをキャッシュする

投稿日:2018/02/04 更新日:

基本的に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秒ほど早くなりました。
今回のレポジトリは依存関係をそれほど定義していないのですが依存関係が多い場合はそれなりに効果があると思います。

-CI
-

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

JenkinsでSCMにGitを追加して、Bitbucktからクローンする方法

JekninsでGitリポジトリを取得するためのプラグインがありますので、そのプラグインをダウンロードして、ついでにBitbucketからチェックアウトしたいと思います。 ちなみに、Bitbucket …

no image

JenkinsでiOSアプリをビルドする手順

先日、@ITの記事で、「グリーはいかにしてJenkinsを導入したのか」という記事が掲載されておりました。 この中に、Mac上のJenkinsでiOSアプリをビルドする方法について記載がありました。 …

no image

Jenkinsの管理画面で「URLがUTF-8でデコード・・・」みたいな警告が表示される場合の対応方法

クソ長いタイトルの通りなのですが、Tomcat上で動作している、Jenkinsの管理画面で 「URLがUTF-8でデコードされていません。ジョブ名などにnon-ASCIIな文字を使用する場合は、コンテ …

多分、一番簡単なApache Tomcat Jenkinsの構成

Jenkinsを外部に公開するということはあんまりないと思います。 Jenkinsを単体で動かしてもいいんですけど、Jenkins専用サーバーではなくてHTTPサーバーがすでに動作していてJenkin …

Jenkinsでビルド実行時に確認を行う方法

Jenkins便利ですねー。 ビルドボタン一発で処理が実行されますからね。 しかしながら、中には実行が怖いビルドもありますよね・・・。 例えば、本番サーバーで運用しているアプリケーションへのデプロイと …