継続的インテグレーションをクラウド化する
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のモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
「プロジェクトマネジメント」カテゴリの記事
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「ソフトウェア」カテゴリの記事
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのenum型はシングルトンクラスみたいだ(2022.06.20)
- テスラが従来の自動車メーカーと異なるところは工場までソフトウェア化すること(2022.02.09)
- 「RubyやRailsは終わった」という記事のリンク(2022.01.09)
「Redmine」カテゴリの記事
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- 第27回redmine.tokyo勉強会の感想 #redmineT(2024.11.10)
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
コメント