Travis CIを高速化するContainer-based Infrastructureを試した
継続的インテグレーションしてますか?
オープンソース開発の継続的インテグレーションにはTravis CIが便利ですが、ビルドが始まるまでに少し時間がかかるという欠点がありました。Travis CIはVMベースの分離技術を採用しているため、ビルドを要求してもCPUやメモリのリソースに空きができるまで待たされることがありました。
そこで、Dockerベースのコンテナでビルドを行う仕組みが先週から提供され始めました。公式アナウンスによると、ビルドの立ち上がりが非常に早くなり、さらに、より多くのCPU時間やメモリが使えるようになると書かれています。
ただし、現状ではビルドの中で sudo
が使えません。また、好きなDockerイメージが使えるわけではなく、あらかじめ用意されたDockerイメージでビルドが実行されます。これらの制約は今後解決されていくようです。
では、どれぐらい早くなるんでしょうか?
試してみた
ビルドツールにGradleを使っているプロジェクトで試してみました。GitHubとTravis 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行追記するだけでビルドが劇的に早くなります。ぜひ試してみてください。
以上、クリスマスイブの投稿でした。