万人のためのオートメーション: 継続的インテグレーション・サーバーの選択

オープン・ソース CI サーバー、CruiseControl、Luntbuild、およびContinuum の調査

継続的インテグレーション (CI) サーバーにはありとあらゆる選択肢があるため、自分にぴったりのものを決めるのは大変です。連載「万人のためのオートメーション」の第 2 回では、開発オートメーションのエキスパート、Paul Duvall が一貫した評価基準とわかりやすいサンプルを使い、Continuum、CruiseControl、およびLuntbuild に絞ってオープン・ソース CI サーバーを調べます。

Paul Duvall (paul.duvall@stelligent.com), CTO, Stelligent Incorporated

Paul DuvallPaul Duvall は、Stelligent Incorporated の最高技術責任者です。同社は、開発チームが初期の段階から頻繁にコード品質を監視および改善できる効果的な開発者テスト戦略と統合手法を提供することによって、企業のソフトウェア品質向上を支援しています。彼は『UML™ 2 Toolkit』の寄稿者で、現在は『Continuous Integration: Improving Software Quality and Reducing Risk』(Addison-Wesley) を共同執筆中です。



2006年 9月 05日

ぱっと頭に浮かぶだけでも、現在市場に出ている CI サーバーは商用およびオープン・ソースを合わせ、少なくとも12 はあります。いずれもソフトウェア・ビルド・プロセスの自動化を目指しているとはいえ、それぞれに特有の利点と欠点があります。さらに無数のツールが使用できることもあって、どれを選ぶかを決めるのは非常に骨の折れる仕事です。

肝に銘じておかなければならないことは、ツールを使用してプロセスを自動化すると決めたら、そのツールが非常に重要になるということです。誤ったツールを選ぶと、全体的な柔軟性が制限されたり、単純な操作に時間がかかったり、あるいは特定のサポート・ツールやプロセスしか使用できなくなる場合があります。

CI サーバーの選択基準

新しいツールの分析は、次のような程度で済まされる場合がよくあります。

Tim は Acme Inc のツールを使っているという話だ。Tim は賢いから、私も AcmeInc のツールを使うことにしよう。これで私も賢い連中の仲間入りだ。

この連載について

私たちは開発者として、ユーザーのプロセスを自動化するために作業しますが、自分自身の開発プロセスを自動化するチャンスは見落としがちです。そこで、連載記事「万人のためのオートメーション」では、実用的なソフトウェア開発プロセスの自動化を検討し、自動化を上手に適用するタイミングと方法を教えます。

Tim に Acme Inc のツールを選んだ理由を尋ねたとしたらどうなっていたでしょう。そのツールの使用は、Timの意思ではなく会社の命令であったことが分かったかもしれません。このような理由から、自分なりの技術的要件と、そしてもちろん周りを取り巻く要件に基づいてツールを分析することが重要になります。そうでないと、必要を満たさないどころか役に立たないツールを選ぶことになりかねません。

通常、決定する際にたいていの人が極めて重要視するのはツールの機能です。機能は重要な役割を果たしますが、その他にも考慮しなければならない基準があることを忘れないでください。経験から言うと、ツールを評価する際にもっとも役立つのは以下の5 つの基準です。

継続的インテグレーションとは何か

継続的インテグレーション (CI) とは、チームが開発サイクルの後になってから欠点を見つけて修正するのではなく、継続的にフィードバックを取得して改善を行うことを可能にする慣例の実作業のことです。ツール(CruiseControl など) をバックグラウンドで実行してバージョン管理リポジトリーをポーリングし、変更を見つけます。変更があれば、ツールが事前定義されたビルド・スクリプトを例えばAnt などによって実行します。このように、継続的インテグレーションの実践により継続的検査が促進されます。

  • 機能
  • 信頼性
  • 存続性
  • ターゲット環境
  • 使いやすさ

そしてもう一つ忘れてはならないのは、この 5 つの特性を客観的に検討することが重要だということです。

製品の機能

CI サーバーの機能に関して検討事項となるのは、ツールのバージョン管理システムとのインテグレーション、Antや Maven などのビルド・プラットフォームとの対応性、そしてフィードバックとレポートの作成機能です。また、ビルドのラベル付け、プロジェクト依存関係の管理など、その他の機能を検討することも忘れないでください。最後に、特定の拡張が必要になった場合に備えて、製品の拡張性を理解しておくと役に立ちます。

表 1 に、各機能の詳細を説明します。

表 1. CI サーバーで評価する機能の詳細
機能説明
バージョン管理システムのインテグレーションI使用している特定のバージョン管理システムをツールがサポートしない場合、カスタム・インテグレーションを作成しなければなりませんが、その覚悟があるかどうかを考えてください。
ビルド・ツールのインテグレーションCI サーバーを選択する際には、使用中またはこれから使用する予定のビルド・ツールを検討する必要があります。Java™プログラミングで人気が高いのは明らかに Ant と Maven で、ほとんどすべてのCI ツールはこの 2 つをサポートします。ビルド・システムが Ant と Maven のいずれでもない場合、CIツールがコマンド・ラインからのプログラム実行に対応するかどうかを調べてください。
フィードバックおよびレポート古いことわざにあるように、森のなかで 1 本の木が倒れたら、これに気付く人がいるでしょうか。ビルドが失敗した場合、それが誰かに通知されますか。誰にも知らされないとしたら、CIツールを持っている意味がありません。すべての CI ツールには E メール、インスタント・メッセンジャー、RSSなどの通知メカニズムが備わっていますが、自分にとって最適なのがどれかを考えてください。
ラベル付け一部の開発チームは、ビルドの履歴を追えるよう、各ビルドに固有のラベルを付けて特定のビルド・インスタンスを後日参照できるようにします。このようにラベルを付けることが重要である場合、該当する機能を提供するCI サーバーは限られていることに注意してください。
プロジェクトの依存関係場合によっては、ビルドしたプロジェクトに従属プロジェクトをビルドする必要があります。特定のCI サーバーはこの機能をサポートしますが、それ以外の CI サーバーではサポートされません。
拡張の容易性ツールの現在の機能は拡張しやすいものなのか、簡単に拡張するためのプラグインが揃っているか、あるいはコードを常に変更しなければならないかを調べてください。

機能の観点からは、必要に応じた正しい CI サーバーを選ぶには上記に説明した事項が重要になります。

製品の信頼性

オープン・ソース CI サーバーは簡単にダウンロードして使用できるので、実際に製品を使ってみてその信頼性を判断することができます。さらに、たいていの場合、ツールの信頼性と、それが市場に登場してからの年数には相関関係があります。例えば、新製品にはバグがまだ発見されていないというリスクがあります。該当ツールに対して公表されている問題を検討するには、ユーザー・グループが優れたリソースとなります。多数の問題が投稿されていたり、複雑な質問が多過ぎる場合、そのツールは使いにくいことを示しています。

ここで取り上げるサーバーはオープン・ソースなので、ダウンロードした人が何人いるかを調べれば、製品の正常性を知ることができます。ユーザーが少なければ、すなわちフィードバックの経路も少ないため、他をあたったほうがいいかもしれません。

存続性の見込み

CI サーバーをダウンロードする前に、そのサーバーの将来的な見込みを理解することは有益です。簡単に言えば、使われなくなったツールや廃棄に向かっているツールを使うのは、いい考えではありません。ツールが何年間存在しているか、そしてユーザー・グループで活発な活動が行われているかどうかを調べてください。製品の信頼性がユーザー・グループから計れるのと同じく、コミュニティーが活動的であれば、ツールの将来も明るいと言えます。

ターゲット環境

CI サーバーはすべての環境で機能するわけではありません。そのため、サーバーがサポートするオペレーティング・システム、そして基礎となるシステム要件を検討する必要があります。例えば、ツールが最新バージョンのPython で作成されている場合、そのバージョンの Python を OS で使用できるかどうかを確認しなければなりません。

使いやすさ

製品の使いやすさはおそらく、検討事項としてもっとも主観的な基準の一つでしょう。構成ファイルを手動で変更したいという人もいれば、Webコンソールなどのアプリケーションからすべての管理タスクを実行させたいという人もいます。サーバーによっては、単純な管理を実行するために画面を次々とクリックしていかなければならないものも、直感的なウィザードが提供されているものもあります。

CI サーバーの仕組みを理解したいのであれば、しゃれた管理 Web フォームは重要でありません。一方、人手不足で働き過ぎの人にとっては、CIサーバーの管理に多くの時間を費やすのは遠慮したいことでしょう。

このセクションで説明した 5 つの点を考慮しながら、いよいよ 3 つの CI サーバーを検討してみましょう。検討する対象は、Apacheの Continuum、CruiseControl、そしてビルド管理サーバー Luntbuild です。


Apache Continuum

Continuum は新たに登場した CI サーバーの一つで、新顔ながらも賞賛に値するサーバーです。Continuumのセットアップと構成は簡単明瞭で、ZIP ファイルをダウンロードして解凍し、コマンド・プログラムを実行するだけですぐに使用できます。プロジェクトの構成は、Webベースのインターフェースを使用して簡単に行えます。おまけに Continuum にはJetty Web サーバーが組み込まれているため、Web サーバーをインストールする必要もありません。さらに、Continuumは Windows サービスとして実行することが可能で、コンテキストに依存した文書をアプリケーションの特定セクションに組み込むため、豊富なヘルプが提供されます。

もっと詳しく知りたいですか

CI サーバーには多彩な選択肢が揃っているため、この記事ではそれぞれのサーバーを調べて、どのサーバーが最適なのかを判断するのに十分な材料を提供します。ここでは例として3 つのサーバーを比較していますが、各サーバーの特定の詳細については深く掘り下げず、この3 つのサーバーですぐに使えるオプションに話題を絞ります。詳細を知りたい場合は、サーバーそれぞれのインストールおよび構成ガイドを参照してください。

折り紙つきの使いやすさ

Continuum を使用して最初に気付くことは、その使いやすさです。サーバーを立ち上げて、プロジェクトの変更をポーリングするまで、ほんの数分しかかかりません。実際、Continuumを Windows 上に準備するのに必要なステップは、以下の 4 つだけです。

  1. Continuum ZIP ファイル (「参考文献」を参照) をダウンロードします。
  2. ファイルのコンテンツをローカル・ディレクトリーに解凍します。
  3. run.bat ファイルを実行し、続いて InstallService.bat を実行します。
  4. ブラウザーを開いて http://localhost:8080/ にアクセスします。

Continuum には、5 つのバージョン管理システム、Subversion、CVS、StarTeam、Bazaar、およびPerforce が組み込まれています。さらに、Visual Source Safe や ClearCaseなどのその他のバージョン管理ツールの部分的サポートもあります。Continuumがサポートするビルド・メカニズムは、Ant、Maven1、Maven2、および Shell (コマンド・ライン)の 4 つです。

Continuum の構成

初めて Continuum Web アプリケーションにアクセスすると、ユーザーはデフォルトでゲスト・アカウントに設定されます。ゲスト・アカウントでは、どのプロジェクトでも表示することはできますが、プロジェクトの管理や構成は一切できません。ただし、管理ユーザーを作成して、プロパティーを設定するのは簡単で、すべてのプロジェクトに適用されます。

図 1 に、管理ページを示します。このページでは、管理者アカウントの作成や作業、ビルド出力、デプロイメントの各ディレクトリーの作成をはじめ、すべてのプロジェクトに対するContinuum 設定を管理できます。

図 1. 簡単にできる Continuum の構成
Continuum の構成

モニター対象プロジェクトの追加

Continuum がプロジェクトをモニターするように構成するのは、この上なく簡単です。単に、目的のビルド・プラットフォーム(Ant または Maven2 など) を選択し、Continuum に目的のバージョン管理システムを指定するだけのことです。

図 2 に、Ant プロジェクトをセットアップする場合の必須フィールドを示します。

図 2. Continuum でのプロジェクトの作成
Continuum でのプロジェクトの作成

設定した情報を保管すると、Continuum は 1 時間ごとにバージョン管理リポジトリーをポーリングします。チェックする間隔は、プロジェクト設定を変更して短くすることも、長くすることもできます。ここでは継続的インテグレーションを話題にしているので、変更をチェックするのは1 時間に 1 回だけでなく、5 分ごとにすることをお勧めします。

デフォルトでは、Ant を使用する場合、Continuum はプロジェクトのルート・ディレクトリーでプロジェクトのbuild.xml ファイルを検索します。別のファイル名を使っている場合や、このファイルがプロジェクトのルート・ディレクトリー内にない場合は、この設定を変更できます。

Continuum は CI の現場では新参者ですが、その使いやすさと、人気のバージョン管理システムと現在使用可能なビルド・ツールに対する充実したサポートで大きな反響を呼んでいます。今後のバージョンには、レポートを追加して表示する機能が期待されます。


CruiseControl

CruiseControl は、CI サーバーの先駆者です。5 年以上の間、さまざまな方法で使用されているCruiseControl サーバーは、継続的インテグレーション実践の代名詞になっています。実を言えば、私も長年にわたるCruiseControl ユーザーの一人です。

改善されたインストール

前回 CruiseControl を試してみてインストールと構成が負担だと感じてから、しばらく時間が経っているとしたら、最近のバージョンを試してみることをお勧めします。現在は、さまざまな方法でCruiseControl をインストールできるようになっています。例えば、Windows を使用している場合、バイナリー実行可能ファイルをダウンロードして実行するのがもっとも簡単なインストール方法になるかもしれません。もちろん従来のようにソースをダウンロードすることもできるので、ご心配なく。

CruiseControl は、難しい設定はなく、CVS リポジトリーをポーリングして Antビルド・スクリプトを実行する構成ファイルで事前構成されています。CruiseControlには Jetty も組み込まれているので、Web サーバーをインストールする必要はありません。

バージョン管理システムのポーリング

Luntbuild と Continuum と比べ、CruiseControl は 10 種類以上のバージョン管理システムをサポートするという点で勝っています。さらに、CruiseControlはこれらのツールのカスタム・コマンドの多くもサポートします。リスト 1 は、CruiseControlの config.xml スクリプトを使用して Subversion リポジトリーをポーリングする例です。

リスト 1. config.xml ファイルによるリポジトリーのポーリング
<listeners>
  <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<modificationset quietperiod="30">
  <svn RepositoryLocation="http://www.qualitylabs.org/svn/ambientorb/trunk"
    username="bfranklin"
    password="G0Fly@Kite"
  />
</modificationset>

ビルド・スクリプトの実行

Subversion などのバージョン管理システムで変更が検出されたときに、CruiseControlが代行ビルド・スクリプトを実行するように構成するのは簡単です。例えばリスト2 では、Ant スクリプトを config.xml から呼び出し、CruiseControl に Subversionリポジトリーのポーリングを 60 秒ごとに実行して別の Ant スクリプトを実行するように指示しています。代行ビルド・スクリプト(リストには記載されていません) は古いファイルを削除し、Subversion から最新ソースをチェック・アウトして、プロジェクトのビルド・スクリプトをコード上で実行します。

リスト 2. Ant ビルド・スクリプトの実行
<schedule interval="60">
  <ant anthome="apache-ant-1.6.5" buildfile="build-${project.name}.xml"/>
</schedule>

CruiseControl のこの機能をセットアップしてサーバーを起動すると、図 3 に示すCruiseControl の Web ダッシュボードにアクセスできます。

図 3. CruiseControl ダッシュボード
CruiseControl ダッシュボード

CruiseControl ダッシュボード

最終ビルドについてのフィードバックを受け取るには、リスト 3 の config.xmlスクリプトに htmlemail プラグインを追加します。config.xml ファイルを使用すれば、テキスト・メッセージの送信、電子デバイス(X10 を使用)、そしてインスタント・メッセンジャーまで、さらに多くのフィードバック・メカニズムを構成することができます。

リスト 3. CruiseControl での E メールの送信
...
<plugin name="htmlemail"
  buildresultsurl="http://${env.COMPUTERNAME}/cruisecontrol/buildresults/${project.name}"
  mailhost="${smtp.server}"
  username="${mail.username}"
  password="${mail.password}"
  returnaddress="${buildmaster.email}"
  returnname="${buildmaster.name}"
  subjectprefix="${project.name} build"
  xsldir="webapps/cruisecontrol/xsl"
  css="${reportdir}/cruisecontrol.css"/>
   ...
  <htmlemail>
    <always address="${buildmaster.email}"/>
    <failure address="${buildmaster.email}"/>
  </htmlemail>

多くの便利な機能を提供する CruiseControl には、強力なユーザー・コミュニティーがあり、拡張性にも非常に優れています。この記事で評価する他の2 つのツールに比べ、CruiseControl はそれほど使いやすくないと判断する開発者もいれば、その一方で、XMLスクリプトによる変更がより優れた機能を提供すると判断する開発者もいます。


Luntbuild

Luntbuild は、市場での年数という点では Continuum と CruiseControl の中間に位置します。Continuumと CruiseControl とは異なり、Luntbuild はビルド管理サーバーとして、並行開発やユーザー・グループ管理といった内容をサポートすることを目的としています。構成全体はWeb アプリケーションで管理されるため、操作が必要な構成ファイルはありません。QuickBuildという、ユーザー・サポートが含まれた市販のものもあります。

組み込まれていないJetty

Luntbuild にはいくつかのインストール方法があります。もっとも簡単だと思うのは、おそらくGUI インストールによる方法でしょう。Luntbuild は Web アプリケーションを使って構成および管理するため、Tomcatや Jetty などの JSP を処理できる Web サーバーを確実に稼働させておく必要があります。

バージョン管理ポーリング

Luntbuild は、CVS、Subversion、ClearCase、Perforce をはじめとする 8 つのバージョン管理システムをサポートします。図4 に、Subversion をポーリングする Luntbuild の設定を示します。

図 4. Subversion リポジトリーをポーリングする Luntbuild
Subversion リポジトリーをポーリングする Luntbuild

ビルドの実行

Luntbuild がサポートするビルド・プラットフォームは、Ant、Maven、Maven2、コマンド・ライン、そしてrake (Ruby アプリケーションのビルドに使用) の 5 つです。図 5 に、Ant ビルダーの構成ページを示します。

図 5. Luntbuild による Ant スクリプトの実行
Luntbuild による Ant スクリプトの実行

ビルドのスケジューリング

図 6 に示す Luntbuild の Schedule タブを使用して、Luntbuild が変更を検出するためにバージョン管理システムをポーリングする頻度を設定できます。このタブでは、各ビルドに割り当てる固有のビルド・ラベルを指定することもできます。

図 6. Luntbuild でのビルドのスケジューリング
Luntbuild でのビルドのスケジューリング

Luntbuild での結果公開

プロジェクト、Version Control System アダプター、ビルド、そしてスケジューラーを構成すると、ユーザーがフィードバックを受信する方法を指定できるようになります。ただし、Luntbuildに組み込まれているのは、E メールおよびインスタント・メッセンジャーのサポートのみです。この他、図7 に示す Luntbuild のメイン・ページからビルドをモニターできます。

図 7. Luntbuild の Web アプリケーションからのビルドのモニター
Luntbuild の Web アプリケーションからのビルドのモニター

Luntbuild は、プロジェクトの依存関係の管理や多数の Version Control Systemアダプターをはじめとする強力な機能を備えたホストを提供します。このツールをセットアップして構成するのに必要な手順は多数あるため、ワークフローとユーザー・インターフェースを簡易化できるはずです。


CI の成績結果

ユーザーの特定のニーズを知らずに、どのツールが適切であるかを勧めるのは軽率です。それぞれのサーバーに優れた機能が備わっていて、最初に述べたように、あるユーザーにとって最適なサーバーであるからと言って、それが他のユーザーの必要を満たすとは限りません。

簡単に使えるツールをお求めなら、Continuum を検討してください。拡張性と柔軟性に優れ、ユーザー・コミュニティーが盛況であることが重要ならば、CruiseControlを試してみてください。あるいは、Web 管理と拡張ユーザー・サポートのオプションをお探しなら、Luntbuildを調べてください。これらのサーバーそれぞれを中心として開発エコシステムが構築されているため、特定の機能が足りないという場合は、ご要望に合った拡張機能が見つかるはずです。

表 2 に、この記事で検討した CI サーバーごとに機能、信頼性、存続性、ターゲット環境、そして使いやすさという5 つの点をまとめました。これは、私自身の経験に基づいた要約です。

表 2. CI サーバーの検討点マトリックス
機能信頼性存続性ターゲット環境使いやすさ
ContinuumAnt、Maven1 と Maven2、および Shell をサポート。

XML-RPC および SOAP によるリモート管理機能。Maven2 をサポート。ユーザー・グループ。追加のレポートおよびフィードバック・メカニズムが今後期待される。コードの変更は不要。
2005 年にリリース。Apache との関係で、Continuum の人気が高まることが期待される。Apache Maven による充実したユーザー・コミュニティーのサポート。市場ではまだ新製品としての位置づけ。Linux、Mac OS X、Solaris、および Win32。抜群の使いやすさとインストールの容易さ。
CruiseControl充実したバージョン管理インテグレーションと優れた拡張性。JMX 制御によるリモート・アクセス。RSS、X10、Jabberをはじめとした、複数のフィードバック・メカニズム。2001 年にリリース。3 つのサーバーのなかでは、CruiseControl がもっとも開発現場で使用されている。活発なユーザー・コミュニティー。あらゆる目安が、CruiseControl が存続することを示唆している。Windows およびUnix。Java JVM を実行可能なプラットフォーム。インストールが簡単。XML 構成ファイルを変更しないでそのまま使用できる場合もある。
Luntbuildプロジェクト依存関係、ラベル付け、セキュリティー・グループ、および並行開発。2004 年にリリース。Luntbuild には拡張ユーザー・サポート・オプションが用意されている。ユーザー・コミュニティーは CruiseControl ほど活発ではない。JVM およびサーブレット・コンテナーを実行可能なシステム。インストールは簡単だが、ユーザー・インターフェース/ワークフローを大々的に改善することが可能。Webベースの構成 (変更が必要な構成ファイルはない)。

この記事ではサーバーを 3 つに絞って評価しましたが、他にも多数のサーバーがあり、必要によってはこの3 つより適している場合もあります。いずれにしても、CI サーバーをどのように選べばいいのかを理解していれば、選択は難しいことではないはずです。来月は、開発プロジェクトで頻繁に犯されるビルドの誤ちを取り上げます。お楽しみに。

参考文献

学ぶために

製品や技術を入手するために

  • Continuous Integration Server Feature Matrix: 現在市場で入手可能な多数の CI サーバーとそれぞれの機能のマトリックスです。
  • Continuum: Apache の CI サーバー世界への進出です。
  • CruiseControl: 継続的インテグレーションのために無料で入手可能なオープン・ソース・サーバーです。
  • Luntbuild: 市販用サポートが拡張されたもう一つの継続的インテグレーション・サーバーです。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=218851
ArticleTitle=万人のためのオートメーション: 継続的インテグレーション・サーバーの選択
publish-date=09052006