BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ThoughtWorksのMingleがビルド時間を改善

ThoughtWorksのMingleがビルド時間を改善

原文(投稿日:2015/02/28)へのリンク

Mingleの継続的インテグレーションには現在,1回のビルドに40分を要する – ThoughtWorksのソフトウェアコンサルタントであるSudhindra Rao氏は,先日のブログ記事にこう書いた。

MingleはJRubyを使って,Java上で動作します。このような最上級のテクノロジでも,MingleのCIビルドにはまだ40分掛かるのです。これは改善の結果であって,私たちはこれで満足しています。

Mingleのこのビルドでユニークなのは,すべてのテストを実行した上で成功を宣言している点だ,と氏は言う。40分というのは,すべてがパスするための合計時間なのだ。ThoughtWorksでは,もっと高速なビルドが可能だと考えている。

氏は,継続的デリバリのツールとして,gocdを導入する予定だという。gocdを使うことで,パイプライン構造が自由に設定可能となり,構成のスケールアップが実現できるからだ。氏らはgocdビルドパイプラインを積極的に並列化して,これらのテストを1時間以内で完了できるようにしている。

gocdを使ったテストの並列化には,かなりの時間を投資しました。 旧世代のジェネレーションテストの分割方法は,簡単なものですが,自社開発した並列化戦略を備えていました。私たちはTLB(Test Load Balancer)を導入して,これをより堅牢で,なおかつ自動化されたテスト分割および分配方法にリプレースしたのですが,それによって私たちのテストに存在する依存関係が明らかになりました。この依存関係を解消してテストをクリーンアップし,TLBで実施する上で適切な - 実行順序や副作用,環境などに依存しないものにするためには,かなりの時間が必要でした。この並列化のおかげで,以前から望んでいたクリーンなテストが実現したのです。それと同時に,エージェントの数を増やして,ビルドパフォーマンスをさらに引き出すこともできました。現在ではユニットテスト,機能テスト,受け入れテストなどは,すべて並列的に実行できるようになっています。

ThoughtWorksでは受け入れテストについても,別のツールを選択してその一部をリプレースした。新たに作成あるいは書き換えを行うテストについては,capybarawebdriverを利用するようにした。また,意図が不明確と思われる受け入れテストについては,徐々に削除ないし非推奨としている。さらに,機能を簡明に表現できていないテストをRSpecで書き直した。RSpecはRubyプログラマを対象とした,振る舞い駆動の開発ツールである。

この作戦で,非常に大きな成果を上げることができました。この活動を続けていけば,ビルドをさらに高速化できるのは間違いないでしょう。

この記事に星をつける

おすすめ度
スタイル

BT