Hudson EC2 プラグイン

CIのビルドやテストには、往々にして様々な環境を用意する必要があります。例えば、職場では、GlassFishのテストには必ずLinux,Windows,Solarisの3種の環境が必要ですし、JDKに至っては、バージョンの異なる10以上の異なる環境でテストが行われます。こうした環境を実物のコンピュータに用意してもよいのですが、テストの負荷は一定ではないので、(土日夜間など)計算機資源が過小に利用されているか、(リリース直前など)計算機資源が埋まってしまって待ちが発生するか、どちらかになりがちです。


こうした観点から仮想化やクラウドコンピューティングはCIと非常に相性のいい技術であるといえます。仮想化の場合は、物理的な計算機の上に異なる環境を必要に応じて走らせられますし、クラウドコンピューティングの場合は、物理的な計算機のことを気にせず、カンバン方式で仮想計算機を割り当てればよいからです。


そこで、HudsonにEC2サポートを追加するHudson EC2プラグインをリリースしました。このプラグインを使うと、Hudsonが自動的にEC2を利用して動的にクラスタのサイズを調整するようになります。具体的には...

アカウント情報を登録

プラグインをアップデートセンターからインストールしたら、システム設定画面に、Amazon Web Servicesのユーザーアカウント情報を登録します。また、起動したEC2インスタンスに接続する為に、RSAキーペアを登録する必要があります。既にEC2を使っている人は、お使いのキーをコピペできますし、EC2は始めて、という人はHudsonに生成させる事が出来ます。「Test Connection」を押してこれらの情報が正しく入力されていることが確認できたら完了です。



AMIを登録

次に、起動したい計算機テンプレート(AMI)を探します。ElasticFoxなどを使うと公開されているAMIを見付やすいでしょう。HudsonはsshをサポートしているUnix AMIであればどれでも使えるはずです。残念ながら、Amazonの提供しているプレーンなWindowsイメージはリモートアクセス技術を何もサポートしていないので、Hudsonからは利用できません。


また、これらのAMIにHudsonのラベルを設定することで、Hudsonがシステムの稼働状況を監視しながら適切なAMIを起動させられるようになります。例えば、もし既存の「solaris」ラベルのついたスレーブがフル稼働中で、更に「solaris」ラベル上で実行されなくてはならないジョブがある時、Hudsonは「solaris」ラベルのついたAMIを起動します。


initスクリプトは、AMIの起動直後に実行されるスクリプトを指定します。ここで、ビルドに必要なツールをインストールするとよいでしょう。例えば、Ubuntu AMIにはJavaがプリインストールされていないので、「apt-get update; apt-get -y install sun-java6-jdk」などとしてJavaをインストールしてください。



このようにして複数のAMIを異なるラベルに割り当てることで、異種混在の環境を実現できます。

出来上がり

以上の設定で、Hudsonはクラスタの稼働状況を自分で監視し、必要に応じてEC2インスタンスを起動したり終了させたりするようになります。


なお、クラスタの稼働状況を監視する部分はHudsonコアに含まれているので、グルーコードを書くだけで、異なるクラウド環境に対応させる事が出来ます。コミュニティではVMWare labmanagerに対応させるプラグインが開発中ですし、VirtualBox web serviceを利用して仮想化にVirtualBoxを使うのも面白いのではないかと思います(興味のある人は拙作のVirtualBox JAX-WS clientをどうぞ)。また、同僚とフライデー・プロジェクトにEucalyptusをインストールしたので、Hudson Eucalyptus Pluginというのも出来るのではないかと思います。


他方、ソースコードがファイアーウォールの中にある場合にはVPNのセットアップが必要になるでしょうし、データをやりとりする場合にネットワークの帯域がどの程度必要なのか、未知数です。この辺について、皆さんのフィードバックをお待ちしています。