第1章
構成管理入門  

第2章
Subversionによるバージョン管理入門

第3章
Subversionベストプラクティス

第4章
Maven2によるビルド入門

第5章
Maven2ベストプラクティスリリースの自動化

第6章
リリースの自動化

Appendix
Maven 2はまり道


※WEB+DB PRESS Vol.39掲載の記事を載せています。

第5章 Maven2ベストプラクティス

Authors:YAMAMOTO Ryuzo

Continuum - 継続的インテグレーション

「継続的インテグレーション」とは、XP(eXtreme Programming)のプラクティスの1つで、 「すべてが自動化された再現可能なビルド・テストを日に何度も行うこと」です。 Continuumは、この継続的インテグレーションを実現するためのツールです。 継続的インテグレーションのメリットには、次のものがあります。
継続的インテグレーションを実践するには、まずビルド・テストの自動化が必要です(もちろん十分 なテストコードもです)。このビルド・テストの自動化はMaven 2によってすでに実現できていますね。
しかし、Maven 2では、ビルド・テストの実行はコマンド1つで行えますが、この「コマンド1つを実 行する」という作業は誰かが行わないといけません。
この作業を人ではなく機械に定期的に行わせる自動化を行って初めて、「継続的な」ビルド・テストが実 現できるのです。ですので、たとえばcronやタスクスケジューラがあれば、ひとまず継続的インテグ レーションは実現できます。
では、なぜContinuumのようなツールを使う必要があるのでしょうか? Continuumには、次のメリットがあります。
上記の機能をcronなどで実現するのは、けっこう大変ですよね。
また、ContinuumはMaven 2だけでなく、Maven 1、Ant、シェルスクリプトでビルドやテストを行う プロジェクトもサポートしており、Maven 2化していないプロジェクトであっても継続的インテグレー ションが可能となっています。 実際、筆者はPerl(Catalyst)を使用したプロジェクトで、テストを実行させるシェルスクリプトを 作成し、Continuumで継続的テストを行いました。 「ソースコードをコミット」→「Continuumが定期的にテスト」→「結果の通知」という、リズムのよさと、 問題があればContinuumが教えてくれる安心感で、とてもよい開発となりました。

Continuumのセットアップ

では、Continuumをセットアップしましょう。
なお、サンプルファイルのC:\webdb39\server\continuumに、2.まで設定済みのContinuumサーバ を用意しています。
  1. Continuumの初期化
  2. まず、Continuumのダウンロードサイト(注1)からcontinuum-1.0.3-bin.zipをダウンロードして展開し ます。
    そのあと、起動スクリプトbin\win32\run.batを実行します。 初回の起動では、Continuumのデータベース初期化などが行われるため、少し時間がかかります。 次の表示が出たら起動完了です。
        jvm 1 | [INFO] The application server has started.
        
    ここで、いったんCtrl+CキーでContinuumを停止します。

  3. Continuumが使用するポートの設定
  4. 必要であれば、Continuumが使用するポートを設定してください。 apps\continuum\conf\application.xmlの38行目に記述されています(リスト9)。

    ●リスト9 使用ポートの設定
    <webapps>
    ...
      <listeners>
        <http-listener>
          <port>8080</port>
        </http-listener>
      </listeners>
    ...
    </project>
    
        

  5. SMTPサーバの設定
  6. ビルド結果を通知するためのSMTPサーバの設定を、お使いの環境に合わせて変更してください (リスト10)。application.xmlの122〜123行目にあります。

    ●リスト10 SMTPサーバの設定
    <component>
      <role>org.codehaus.plexus.mailsender.MailSender</role>
      ...
      <configuration>
        <smtp-host>localhost</smtp-host>
        <smtp-port>25</smtp-port>
      ...
      </configuration>
    </component>
    
        

  7. 管理者アカウント情報の設定
  8. 設定が終わったら、再度起動してください。起動が確認できたら、 http://localhost:8080/continuumにアクセスしてみましょう。
    初期設定画面が表示されますので、最低限必要な管理者アカウント情報(Admin account)を入力し、 次に進んでください(図2)。 設定完了後、左上の「Login」にアクセスし、今入力した管理者アカウントでログインします。

図2 Continuum初期設定画面


注1)http://maven.apache.org/continuum/download.html

プロジェクトの登録

それでは実際にContinuumを試してみましょう。 先ほどのライブラリプロジェクトwebdb-utilsをContinuumに追加してみます。
Continuumはpom.xmlのscm定義を見て、プロジェクトをチェックアウトしますので、その設定が必要です。 webdb-utilsのpom.xmlにリスト11を追加してください。追加したら忘れずにコミットしましょう。

●リスト11 Subversionリポジトリの設定
<project>
  ...
  <scm>
    <connection>
      scm:svn:file://C:/webdb39/5/repo/trunk
    </connection>
  </scm>
  ...
</project>

    

コミットが完了したら、Continuumの左側のメニューにある「Add Project」の「Maven 2.0+ Project」 をクリックします。追加したいMavenプロジェクトのpom.xmlを「URL」または「参照(ファイルアップ ロード)」で指定できるようになっています(図3)。

図3 Maven2プロジェクトの追加

webdb-utilsのpom.xmlを「参照」から選択しアップロードすると登録完了です。
プロジェクト一覧(Continuum Projects)にwebdb-utilsが表示されます(図4)。

図4 プロジェクトの一覧


プロジェクトの設定

一覧からwebdb-utilsのリンクをクリックすると、このプロジェクトについての設定が確認できます (図5)。
図5 プロジェクトの設定画面


次の設定項目があります。

動かしてみよう

例として「1時間おきに単体テスト実行」の設定 を行い、実行してみます。

■設定する
「Build Definitions」のEditアイコンをクリックして「Edit Build Definition」にアクセスし、Goalsを 「clean test」に変更し、「Submit」します(図6)。

図6 ビルド定義の設定


「1時間おきに」の設定ですが、Scheduleに設定されている「DEFAULT_SCHEDULE」がその設定になります。 左メニューの「Schedules」で変更できますし、新しいスケジュール(1日ごとなど)の追加もできるよう になっています。なお、「1時間おき」にバージョン管理(Subversion)を確認し、前回と変更がない場合 はビルドは実行されません。
「Continuumのセットアップ」にてSMTPサーバを設定した場合は、通知先を追加してみましょう。 「Notifiers」の「Add」ボタンをクリックし「NotifierSelection」で「Mail」を選択して次へ進み、 「MailRecipient address」に通知先メールアドレスを登録します。

■実行する
さてこのままビルドが実行されるのを待つのももったいないので、手動でビルドを実行してみましょう。 「Continuum Project」にある「Build Now」ボタンで手動ビルドを実行できます。
そのあと「Build History」にアクセスすれば、ビルド開始・終了時間・結果が一覧に表示されています (図7)。「Result」にアクセスすればビルド時のコンソール内容も表示され、いたれりつくせりです。

図7 ビルド結果


また、通知先の追加設定を行っていれば、「[continuum] BUILD SUCCESSFUL: webdb-utils」の件名で メールが届いていることでしょう。メールにはビルド時のコンソール内容が記載されています。
ビルド時にテストが失敗したりと問題があった場合は「[continuum] BUILD FAILURE: webdb-utils」 のメールが届きますので、すぐに何が問題だったのかの調査に入れます。 このようにContinuumが定期的に自動ビルドを行い、結果を通知してくれることで問題があればすぐに判明 し、対応にとりかかることができます。
「分担して開発していたのをリリース前日に結合したら問題発生!」のような状況にはもうなりませんね。 一度使いはじめたら手放せないツールとなること間違いありません。