Help us understand the problem. What is going on with this article?

Droneのキャッシュを使ってビルドを高速化

More than 3 years have passed since last update.

Karappoでは、DroneというオープンソースのCIを使っています。Dockerイメージが用意されているので簡単にインストールできるし、非常に便利です。DigitalOceanへのインストールの仕方はこちらを御覧ください。

このDroneは、ビルド毎に指定されたDockerのContainerが立つので(前回ビルド時の環境からは完全に切り離されている状態のため)、例えばRailsのプロジェクトをCIしたい時などに、bundle installを実行すると、その度にダウンロード時間がかかることになります。これはnpmなど他のパッケージマネージャーを使っている場合でも同じです。毎回パッケージのインストールはしたくない、かと言ってビルドに使うDockerイメージ自体に依存ライブラリを入れちゃうと変更が効かなくなるし、どうしたらよいのかなーと思っていました。

理想的には、ローカルでbundle installする場合は、既にインストール済みのパッケージは無視して新しいパッケージのみダウンロードするので、そんな感じにしたいです。そこで、ドキュメントを読んでいるとCachingという項目があるのに気付きました。これを使うと、まさに上で書いたように差分を見てダウンロードしてくれるようにできるはずです。なので、早速試してみました。

例えば、こんな感じの.drone.ymlだった場合、

drone.yml
build:
  image: hoge/hoge
  commands:
    - bundle install --path=vendor/bundle --binstubs=vendor/bin
    - RAILS_ENV=test bundle exec rake db:create db:migrate
    - bundle exec rspec

このように、cache > mountのリストにキャッシュしたいディレクトリを指定を追加してやるだけです。

drone.yml
build:
  image: hoge/hoge
  commands:
    - bundle install --path=vendor/bundle --binstubs=vendor/bin
    - RAILS_ENV=test bundle exec rake db:create db:migrate
    - bundle exec rspec
cache:
  mount:
    - vendor

この場合だと、vendor以下にgemをインストールしているのでこんな感じになります。プロジェクトディレクトリ外のディレクトリをキャッシュする場合は、注意が必要みたいでドキュメントに詳しく書いてあるので見ておいてください。

これで、こんなログだったのが、

$ bundle install --path=vendor/bundle --binstubs=vendor/bin
...
Installing rake 10.5.0
Installing CFPropertyList 2.3.2
Installing i18n 0.7.0
...

こんな感じでInstallingがUsingに代わって、ビルドが高速化されているのが確認できます。

$ bundle install --path=vendor/bundle --binstubs=vendor/bin
...
Using rake 10.5.0
Using CFPropertyList 2.3.2
Using i18n 0.7.0
...

この記事は2016.4.7にこちらのURLで公開していた内容を移行しました。

naokazuterada
Engineer, Designer, Co-founder of Karappo Inc., Creator of MarkdownTOC https://karappo.net/ https://noracast.jp/ https://podcastfreaks.com/ https://github.com/naokazuterada/MarkdownTOC
http://karappo.net
karappo
ウェブ・インタフェース・グラフィックなどを中心に、デザイン及びコンサルティングを行う会社です。企画からデザイン、実装まで、ワンストップで対応することができます。
https://karappo.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away