技術戦略部より、tipsやノウハウなど技術的な話題を発信いたします。by2013.5.7開発ラクーンのCI/CDへの取組みの現状とこれから(2)JenkinsCapistranoSeleniumパフォーマンスCICD継続的インテグレーション継続的デリバリデプロイこんにちは。今回は前回に引き続き「ラクーンのCI/CDへの取組みの現状とこれから」と題した第2回目です。第1回は「Capistrano」によるデプロイの効率向上のお話でした。第2回目は「Selenium」によるテスト自動化の話とシステムとツールを統合管理してくれるCIツール「Jenkins」のお話です。~「Selenium」登場~弊社はサイトを通してビジネスをしているのでサイトがダウンするとビジネスが成り立たないことになってしまいます。その為、当然のことですがサーバの死活監視、プロセス監視、HTTP通信監視等色々な監視を複合で行なっています。その監視の1つとして、「お客様が実際に利用するメインの導線となる機能が正しく機能しているかを確認する」監視という結構泥臭いことを行なっています。スーパーデリバリーで言えば、以下の様なフローを実施することで確認をしています。商品Aの返品・返金処理さてこの監視ですが、以前はその他の監視業務等と併せて外部委託していましたが、現在はSeleniumを利用して行なっています。SeleniumはWebブラウザを使ってWebアプリケーションをテストするツールとしてこれまたメジャーなツールです。FireFoxアドオンのSeleniumIDEにて簡単にテストシナリオを作成することができます。Selenium2(WebDriver)となってからは各種ブラウザをネイティブに操作できる様な作りとなりだいぶ様変わりしました。2008年頃は挙動が安定しなかったり動的なページのテストが上手くできなかったりして余り使えてなかったのですが、Selenium2が発表された頃に再度利用してみて「これはイケそう!」とまた使ってみる気になった経緯があります。現時点ではまだSelenium1系のSeleniumRCを使ってテストを運用しています。その為、テストシナリオはSeleniumIDEを利用してベースを作成した後、記述を見直した上でテストケースとしています。いうのは、利用したことがある人はご存知だと思いますが、SeleniumIDEの記録するシナリオはロケーションの指定の仕方が微妙なものがある為です。表示の度にidが変わる様なものもSeleniumIDEだとほぼ確実にidでロケーションを指定してしまうため、それらは汎用的な形に指定を変更してあげる必要があります。<td></td></tr>~~~ちなみにSelenium2は現在まだ評価中ですが、最終的にはクロスブラウザチェック等も行なっていきたいと考えている為いずれ置換えて行く予定です。等のメソッドは自作する必要があり、一通りのベースを作りこんで検証した上でと考えています。~「Jenkins」登場~さて、上述のSeleniumによる監視ですが、自動定期実行のために何かしかの仕組みが欲しいところです。cronでも機能的には満たせるのですが、今後のSelenium利用シーンの拡大を考慮して、より運用や管理が行い易いものを望んでいました。Jenkinsは言わずと知れたオープンソースの継続的インテグレーションツールの代表格です。コミットトリガによるビルドやスケジューリング、タスクの依存関係構築等がGUI上から簡単に行うことができ、更にプラグインの追加により他にもたくさんの機能を管理対象とすることができます。Seleniumを用いたテストの自動定期実行もプラグインを利用することで簡単に設定が可能です。手順はたったコレだけです。定義例■プラグインとして用意されている割には、細かな設定もかなりの範囲で行えて痒い所に手が届く作りになっています。上記では[browser]で起動すべき実行形式の指定を変更していたり、デバッグモード設定やログ出力等の指定ができる様に[other]にパラメタを積み込んだりしています。Plugin」等のプラグインを入れるのも良いでしょう。SeleniumをJenkinsサーバ自身で動かそうとしていて、且つJenkinsサーバがLinuxでGUIが無い場合、実行にはXwindowやXvnc等の設定をしておく必要があります。この様にJenkinsはインストール後、ほぼ選択と入力をするだけで簡単に始めることができます。基本的にはビルドを中心にしてその前後処理を肉付けしていく感じで徐々にやれる範囲を拡大して行くような流れで構成を作っていくことになると思います。■Jenkinsの画面イメージ■ラクーンのCI/CDのこれからここ迄現時点で行なっている幾つかの取組みを書いてきましたが、ん~・・・まだまだ全然不十分ですね。ワンクリックデプロイやテスト自動化という言葉には程遠い様に見えます。Jenkinsの強みも有効に利用できているとは言えません。第1回の冒頭でも書きましたが、既存である程度の規模のシステムができ上がっている状態からこれらを適用していくのは、一朝一夕では行えません。継続的インテグレーションや継続的デリバリはここ迄やれば完了というものではなく、「継続的」と付いている通り常に改善/改良を加えていくものだと認識しています。そんな訳で、「千里の道も一歩から!」。今後も一歩ずつ着実に成果を積み上げて作り上げていこうと思っています。ちなみに今構想しているこれからの取組みはこんなことです。今回取り上げたツールの他にも色々なCI/CDツールが選択できる状態にあり、それらも上手く取り入れていくことでどれも実現が可能なものだと思っています。終わりにCIやCDについての取組みは直接システムの利用者の満足に繋がるものではありません。開発チームのサポートとして目に見えた改善を感じることができるところですし、何より新しいツール等を駆使して、いかに自分で考えながら最適解を探すかという楽しみもあり、とてもやり甲斐を感じることができるものです。自ら考えて構築することやCI/CDに興味をお持ちの方、是非一緒に働いてみませんか??・・・と、最後に求人を入れつつ、以上、2回に渡ってラクーンのCI/CDについてのお話でした。