継続的インテグレーションをクラウド化する
Hudson作成者の川口さんのBlogを読みながら、継続的インテグレーションはクラウド化と相性が良いという指摘に関するメモ。
【元ネタ】
Hudson EC2 プラグイン - 川口耕介の日記
Hudson Selenium PluginでHudsonクラスタをSelenium Gridに - 川口耕介の日記
HudsonクラスタをHadoopクラスタに - 川口耕介の日記
【既存の問題】
XPを代表とするアジャイル開発におけるコード共同所有やテスト駆動開発などのプラクティスで、いわゆる下流工程の生産性を大幅Upできる。
しかしながら、自動テストや回帰テストを行う継続的インテグレーションは、システムが大規模化するにつれてビルド時間が膨大になるので、生産性が低くなっている。
そのため、「アート・オブ・アジャイル デベロップメント ―組織を成功に導くエクストリームプログラミング」においても、ビルドに含めるテストケースに優先順位をつけたり、夜間ビルドと即ビルドを切り替える等の方策を提示している。
でも、本来は単体テストだけでなく受入テストのテストケースも全て、JUnitで記述して、継続的インテグレーションによるビルド作業の一部としてしまいたい。
そうしなければ、テスト自動化の一番の利点である回帰テストの効果が生きてこない。
【一つの解決策】
一つの解決策は、テスト環境を仮想化し、継続的インテグレーションをクラウド化することだ。
例えば、OSやJDKなどのバージョンが異なるサーバー環境はVMWareで仮想化して、複数の環境を用意できるようにする。
更に、クライアントのOSやブラウザの異なるクライアント環境も仮想化しておく。
そして、Hudsonによる自動ビルドは、複数のビルドサーバー上で並列処理できるようにする。
この利点は、格安のハードウェアを並列に処理させることで、マシンパワーで持って大量のJUnitをこなすのができること。
ビルド作業の並列処理だから、見かけ上の時間は大幅に短縮されるはず。
想像であるが、一つの業務系Webシステムをリリースできる品質に持っていくために、単体~受入テストの全てのテストケースを数えたら、おそらく最低1万件近くは必要だろうと思う。
それだけの桁のテストケースを回帰テストも含めてデイリービルドするには、仮想化+クラウド化は必須の技術だ。
【可能性】
最近のHudsonの動向を見ると、もはやCIツールではなく、汎用クラウド化ツールと呼んだ方がいいかもしれない。
例えば、
Hudson Hadoop pluginでクラスタ処理する。
Hudson PXE pluginでネットワーク接続した複数のOSを制御する。
Hudson EC2 pluginでAmazonEC2のクラウド環境を使う。
Hudson Selenium PluginでHudsonクラスタをSelenium Gridにする。
いずれも、格安のサーバー、仮想化されたビルド環境をバッチ処理のために使うという発想。
しかし、これだけクラウド化の利点があるにも関わらず普及していないのは、クラウド化する設定作業が大変だからだ。
でも、Hudsonはクラウド化の設定作業を楽にする方向で進化しているようだ。
Hudsonを十分に使いこなせれば、Hudsonによってビルド管理やリリース管理を大幅に効率化できるだろう。
XPが出現して10年近く経ってようやく、プロジェクト管理や構成管理、リリース管理などがIT化できる状況が整ってきた。
この技術革新の流れを追いかけていきたい。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのenum型はシングルトンクラスみたいだ(2022.06.20)
- 「コーディングを支える技術」は良い本だ(2022.05.26)
- 「RubyやRailsは終わった」という記事のリンク(2022.01.09)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
- 値オブジェクトの設計がオブジェクト指向モデリングの最初の登山口(2021.07.23)
「プロジェクトマネジメント」カテゴリの記事
- プロセス設計はどの範囲を指すのか?~プロマネの仕事はテーラリングにある(2022.06.19)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
- 初中級プロマネはIPAデータ白書の統計情報を見積り、生産性、品質の観点で活用せよ(2022.04.17)
- タスク分割は親子チケットにすべきか、それともチェックリストにすべきか #redmine(2022.03.04)
「ソフトウェア」カテゴリの記事
- Javaのenum型はシングルトンクラスみたいだ(2022.06.20)
- テスラが従来の自動車メーカーと異なるところは工場までソフトウェア化すること(2022.02.09)
- 「RubyやRailsは終わった」という記事のリンク(2022.01.09)
- 実践した後に勉強するのがエンジニアの本来の道(2022.01.09)
- DB Browser for SQLiteを使う(2021.12.21)
「Redmine」カテゴリの記事
- 第22回東京Redmine勉強会の感想 #redmineT(2022.05.29)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- オープンソースERPパッケージiDempiereに対する派生開発手法の提案の資料が興味深かった(2022.04.24)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
- RedmineのWikiタグでタスクリストを書けるようになった(2022.03.21)
「構成管理・Git」カテゴリの記事
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
- チケット駆動開発のプロセスとチケット管理システムの全体像 #Redmine(2021.12.28)
- 第21回東京Redmine勉強会の感想 #redmineT ~Redmineは業務も組織も包み込む柔軟性がある(2021.11.28)
コメント