GeekFactory

int128.hatenablog.com

Travis CIを高速化するContainer-based Infrastructureを試した

継続的インテグレーションしてますか?

オープンソース開発の継続的インテグレーションにはTravis CIが便利ですが、ビルドが始まるまでに少し時間がかかるという欠点がありました。Travis CIはVMベースの分離技術を採用しているため、ビルドを要求してもCPUやメモリのリソースに空きができるまで待たされることがありました。

そこで、Dockerベースのコンテナでビルドを行う仕組みが先週から提供され始めました。公式アナウンスによると、ビルドの立ち上がりが非常に早くなり、さらに、より多くのCPU時間やメモリが使えるようになると書かれています。

ただし、現状ではビルドの中で sudo が使えません。また、好きなDockerイメージが使えるわけではなく、あらかじめ用意されたDockerイメージでビルドが実行されます。これらの制約は今後解決されていくようです。

では、どれぐらい早くなるんでしょうか?

試してみた

ビルドツールにGradleを使っているプロジェクトで試してみました。GitHubTravis CIを連携させています。

.travis.ymlの変更

コンテナベースのビルドを有効化するには .travis.yml に以下を追記します。

sudo: false

所要時間の比較

直近3回のビルドの所要時間を比較してみました。それぞれのビルド内容はほぼ同じです(GradleプラグインのバージョンやREADMEを変更した程度)。

Before:

  • 2:29 (Gradleのビルド 0:48、テスト 1:39)
  • 2:38 (Gradleのビルド 0:50、テスト 1:46)
  • 3:19 (Gradleのビルド 1:06、テスト 2:01)

After:

  • 1:45 (Gradleのビルド 0:32、テスト 1:05)
  • 1:39 (Gradleのビルド 0:31、テスト 1:05)
  • 1:37 (Gradleのビルド 0:32、テスト 1:01)

なんということでしょう。

ビルドの所要時間が大幅に短縮されました!*1

ビルドが立ち上がるまでの待ち時間はログに残らないので比較できませんでしたが、体感的には相当短くなっています。

まとめ

.travis.yml に1行追記するだけでビルドが劇的に早くなります。ぜひ試してみてください。

以上、クリスマスイブの投稿でした。

*1:おことわり:サンプル数が少ないので、所要時間に有意な差があるまでは言い切れていません