Avant が CircleCI を使用して毎日 250 万回テストを実行している方法とは
CircleCI 導入前の課題
Avant 社は、米国および英国の中間所得層の個人向けのオンラインローンプラットフォームを提供している大手プロバイダーです。Avant のプラットフォームから、すでに 36 億ドル以上が貸し出されています。金融企業ではさまざまなビジネスが登場し、セキュリティニーズが急速に高まっていることから、Avant 社はエンタープライズグレードの継続的インテグレーションソリューションを必要としていました。
Avant 社のテストエンジニアリングマネージャーの Tim Mertens 氏は次のように述べています。「当社では平均して 1 日あたり約 250 万回テストを実行しています。最も大きなテストスイートは、ビルドごとに 30 個のコンテナで並行して実行されます。当社におけるソフトウェアテストの最大の課題の 1 つは、ビルドにかかる時間とビルドを待っている時間の最小化でした。テストが並列で実行されていた場合には、メインアプリケーションのテストスイートの実行に数時間かかっていました。当社では、毎日何度も、本番環境へデプロイしていますが、このような迅速な開発・運用環境では、ビルド実行を長時間待機するわけにはいきません。ビルドが長時間になると、継続で膨大なコンピュートコストがかかり、生産性が低下し、機能開発のスケジュールが長くなります。そのため、エンドツーエンドのビルド時間を短縮するためにできることはすべて行っています。」Avant 社のチームは優れた CI/CD プラクティスがもたらす利点について深く理解していましたが、それまで使用していた CI ツールは柔軟ではなく、ビルドは低速になり、インフラストラクチャに多額の費用がかかっていました。それ以上に、自分のコードを実行しているツールに、十分な透明性があると感じていませんでした。
Mertens 氏は、次のように述べています。「それまで使用していた CI プロバイダーは、実際にテストを実行するために使用するコマンドに直接アクセスできないようにするほど、テストを実行する方法の詳細を厳格に保護していました。これにより、断続的に発生するテストエラーのデバッグが非常に困難になっていました。」
Avant 社のチームにおける開発およびデプロイメントプロセスにとって、CI は不可欠となっており、適切なツールを適切に利用することが、1 日に何度もデプロイメントを自信を持って実行するために必要となっていました。
ソリューション
Avant 社は、インフラストラクチャコストを削減しながら、パフォーマンスとセキュリティを向上させる機会を探っていました。Mertens 氏は次のように述べています。「当社では、他のクラウド CI プロバイダーやエンタープライズ CI プロバイダーも評価しましたが、CircleCI Enterprise が最も、迅速かつ柔軟に、優れたコスト体系で当社のビジネスの目標を叶えてくれることが分かりました。」
「CircleCI を選択した決定的な理由は、複数のワーカー間でテストを自動的に並列化できることです。もう 1 つの主な理由は、コスト体系です。CircleCI のコスト体系によって、オンデマンドまたはリザーブドインスタンスの代わりに Amazon Web Services でスポットインスタンスをプロビジョニングすることにより、インフラストラクチャコストを最適化できます。また、需要に応じてコンピュートをスケールアップおよびスケールダウンできます。CircleCI の堅牢な API も評価ポイントであり、自動 bisect やタイムトラベルビルドなど、開発チーム全体にとってプラスとなる時短機能を実装できました。」
生産性
Mertens 氏は次のように述べています。「当社ではテストスイート全体に影響を与えることができるパフォーマンス改善の機会や一度に多くのテストで改善をもたらす機会を探しています。これは、個別のテスト自体をリファクタリングするよりもはるかに大きなイン
パクトがあります。」
CircleCI Enterprise を利用する前には、Avant 社はビルドを開始して完了するまでに約 33 分を要していました(環境のセットアップとティアダウンを含む)。CircleCI Enterprise では、自社独自のDocker イメージを使用してビルドを実行できるため、Avant はセットアップとティアダウンを最適化し、すべての依存関係をあらかじめインストールして、1 回のビルド時間を約 8 分短縮しました。CircleCI ではビルド全体を通じてアプリケーションテスト環境が維持されるため、Avant 社はビルド時間をさらに5分間短縮できました。
CircleCI Enterprise により、ビルドの並列性をビルドごとに 30 コンテナに増やすことで、開始から終了までのビルド時間を約 15 分さらに短縮しました。全体として、Avant 社は前述のパフォーマンスの改善により、これまで開始から終了までにかかっていたビルド時間を50%以上短縮できました。
Avant 社の Mertens 氏は、同社は API からビルドをトリガーしてタスクを自動化し、テストの不具合を早期に検出することで、開発チームの作業時間を節約できるようになったと述べています。
Mertens 氏は、次のように述べています。「当社が CircleCIEnterprise を使用して行った最初の「重要な」ジョブは、テストが失敗したときに、メインラインのブランチでそのテストエラーを自動的に二分探索(bisect)することでした。断続的にテストが失敗すると、ブランチのビルドが失敗し、開発チーム全体の生産性に悪影響を及ぼす恐れがあります。マスタービルドが失敗する場合、失敗がまだ二分探索されていない場合、CircleCI で auto-bisect をトリガーします。以前は、二分探索はローカルで行う必要があり、完了するまでに数分から1時間以上かかっていましたが、CI によってこの処理が自動化されました。」
「CircleCI を使用して行ったもう 1 つの「重要な」ジョブは、「タイムトラベルビルド」です。タイムトラベルビルドでは、テストスイート全体を未来の日付/時刻の環境で実行します。これにより、日付に関連する障害が実際に発生する前に捉えることができます。月曜日の朝に出社して、ビルドに失敗することよりも悪いことはありません。タイムトラベルビルドを使用すれば、未来の任意の日付でテストを実行してテストの不具合を検出できます。これは、ビルドの成功率と生産性に非常にプラスの影響をもたらしました。以前は、日付が切り替わったという理由だけで、すべてのブランチでテストが失敗して苦労したこともあったのです。」
Mertens 氏に次のように述べています。「CircleCI Enterprise に切り替えたとき、ビルドに要する時間を大幅に改善でき、その結果、開発者の仕事に対する満足度と生産性も即座に向上しました。」
透明性
Avant 社にもたらされたもう 1 つの利点は、「CircleCI Enterpriseでは、ビルドプロセスのすべての段階で、ステップバイステップの実行時間と開始から終了までのビルド時間が完全に透過的になることです。これにより、再現性が大きく向上しています。」
セキュリティ
Mertens 氏は次のように述べています。「CircleCI Enterprise により、ビルドを向上できただけではなく、CI インフラストラクチャをAWS を使用した自己ホスト型の VPC に移行できるようになりました。これにより、認証されたユーザーだけがアクセスできる制限された自社独自のサーバーでコードをホストおよびテストでき、セキュリティを向上できるだけではなく、コスト面にもプラスの影響が生じています。」
費用
ファイアウォール内でコードを実行できるセキュリティ上の利点に加えて、Avant 社は、独自の CI インフラストラクチャを実行する柔軟性と潜在的なコスト削減にも魅力を感じていました。主要な目標の 1 つは、夜間や週末に多くのマシンをアイドル状態にせず、キューに入れられるビルドとそれに伴う生産性の損失を回避するためにピーク時に必要なパフォーマンスを提供できるシステムを構築することでした。
Avant 社について
Avant社は、米国および英国の中間所得層の個人向けのオンラインローンプラットフォームを提供している大手プロバイダーです。Avant 社は、スピーディーな審査により翌営業日から融資を受けることができるサービスを提供し、1,000 ドルから 35,000 ドルの無担保個人向けローンを提供し、世界中で 50 万人以上の顧客にサービスを提供しています。Avant 社は、同社のテクノロジーを組み入れた製品(Powered By Avant)を介して、銀行などのパートナー企業にテクノロジーソリューションを提供し、その顧客に革新的なデジタル融資エクスペリエンスを提供しています。Avant 社は、2012 年後半に設立され、6 億ドル以上の自己資本を調達し、同社のプラットフォーム上で 36 億ドル以上の融資を組成しています。