生産性チームのkmtです。
シャノンでは比較的早い段階から自動テストに取り組んできました 。
過去の記事はコチラ
順調にテストケースが増えるなか、 いくつかの課題を解決するために、 自動化環境の改善を行いましたのでその概要をお伝えしたいと思い ます。
今回解決を目指した課題は以下の3つです。
1.いつでもどのチームでもこの環境を利用できるようにスケールさせ たい
QAではリリース前に数台のAWS環境で自動テストを流していた のですが、もう1台増やしたいなあというときにあの設定忘れてた、 あれ入れ忘れてる等がありなかなかスムーズに増やせる状況ではあ りませんでした。
年々テストは増え、実行時間も少しずつ長くなってきたのですが通常の業務が忙しいとまだ大丈夫かな? と二の足を踏んでなかなか追加のテスト環境を増やせませんでした 。
また
少人数でスクラムチームを組んでおり、 多数のプロジェクトが同時並行ですすんでいます。
当然リリース時期がかぶったりするのですが、 各チームで一部の自動化は流してはいるものの最終的にリリースブ ランチに統合しないと自動化が全て流れませんでした。
その結果最後に不具合が発見されることがありました。
それらを解消したいというのが今回の目標の1つでした。
2.テスト実行時間を削減したい
大量のテストを今以上に早い時間で確認して、 開発チームの人たちに安心して素早いリリースを実施してもらいた いというのが2つめの目標でした。
3.ついでに、 ここ数年運用していて煩わしい部分はなるべく解消したい
ここを改修したいとかJenkinsをバージョンアップしたいと かいろいろあったのですが、弊社の開発エンジニアの人数も増え、 リリースのためのテストをしつつ環境のメンテナンスをするのが難 しい状況でした。
このチャンスにそのあたりもついでに解消したいというのが3つめ の目標でした。
ただし
なるべく少ない工数で実施したいので、 全体の仕組みを大きくは変えないという制約をつけました。
あれもこれもやりすぎるとやはり工数がかかってしまうのでどこか で線引きをする必要があるためです。
これらの目標を少ない工数で改善する為に今回選択したのがAWSのイメージをコピーしてスケールさせる方法です。
- ベースイメージとなるインスタンスとAMIを作成しておきます。
- チームは環境が必要になったら1.
のベースイメージから自分のチーム用のインスタンスを作成します 。(masterイメージ) - 上記実施後、
自動テスト実行JenkinsJOBを実行すると指定した台数分 自分のチーム用のインスタンス(AMI) をコピーしてインスタンスを作成し各AWSでテストが実行されま す。 - テストが終了したAWSは結果をS3を通して、
masterイメージに同期しその後、Terminateされます。 - チームメンバーはmasterイメージのJenkinsを参照し
て自動テストの結果を確認します。
シャノンでは以前からAWSを使用しているので基本的な部分を変更することなく簡単にスケールできるのですが
今回の対応でテストを実施するクライアントもAWSの中にいれて しまいました。
(以前はサーバはAWS、クライアントは別のレンタルサーバを利用し ていました。)
サーバとクライアントが分かれているとネットワークや運用で面倒 だなといった部分もあったのですが、 今回の対応で1つのAWSでテストが完結するのでスッキリとした 作りになりました。
注意するポイント
- 1つのAWSイメージが大きくなるとコピーするので課金もそれな
りになってきます。1つのAWSでどれくらいのテストを流すのか運用を明確にしまし ょう。 - 繰り返しテストを流すとごみがたまりすぐ容量が一杯になるの
でとにかくごみを消すスクリプトをいれましょう。
今後の課題
- 各テストの実施前の準備がまだ結構かかっていること。 DBの復元等、APIではなくDBを復元するツールを作成して使用していますが
、複数のDBの復元を実行するとやはり時間がかかってしまっています。 - 1つのAWSイメージが大きいとコピーするので課金がコストが増えてしまうこと。DBのチューニングや運用方法の見直しでサ
イズをもう少し小さくできるのではないかと考えています。
最後に
今後も環境の課題はでてくると思いますが、AWSやJenkinsをつかって安定した自動化テストをまわせるような取り組みを継続してできればなと思っています。
シャノンでは、このような活動に価値をおくメンバーを募集中です。