継続的インテグレーション その1

今のプロジェクトの規模が大きくなってきて、開発に携わる人も増えてきたので、ビルドと単体テストを自動化したい衝動にかられた。
で、継続的インテグレーションを実践するツールとして、CruiseControl.NETがあるので、さっそく使ってみることにする。

現バージョンは1.1.1なので、下記のサイトからダウンロードする。
CruiseControl.NET v1.1.1
セットアップの形で配布されているので、インストールは簡単にできた。

で、CruiseControl.NETを使ってなにをするかというと以下のようになる。

  1. Subversionから最新のソースを取得する。
  2. NAntを使ってソースをビルドする。
  3. NUnitで作成した単体テストを実行する。
  4. 結果をレポートする。
  5. これらのタスクを定期的に実行する。

CruiseControl.NETの設定

まずはインストールフォルダのserverフォルダにあるccnet.configファイルを開く。
ルート要素として、cruisecontrol要素がある。

<cruisecontrol>
</cruisecontrol>

その下にproject要素を追加する。プロジェクト毎にこれを定義する。

<project name="HogeProject">
  <sourcecontrol type="svn">
    <trunkUrl>http://localhost/svn/default/hoge/trunk</trunkUrl>
    <workingDirectory>c:\temp</workingDirectory>
    <executable>c:\Program Files\Subversion\bin\svn.exe</executable>
    <username>hoge</username>
    <password>hogehoge</password>
  </sourcecontrol>
</project>

sourcecontrolタグでバージョン管理ツールを指定することができる。

  • type属性にバージョン管理ツール名を指定する。他にはcvsやvssが指定できる。
  • trunkUrlタグでSubversionリポジトリを指定
  • workingDirectoryタグでチェックアウトしたソースの配置場所を指定
  • executableタグでSubversionクライアントの実行ファイルパスを指定
  • usernameタグでSubversionリポジトリへのアクセスに使用するユーザを指定
  • passwordタグでパスワードを指定

とりあえず、これだけで一回CruiseControl.NETを起動してみる。
インストールフォルダのserverフォルダにあるccnet.exeを起動する。
するとコンソールが起動してログが出力されてから「Integration complete: Success」というのが表示されたので、一応成功みたい。
で、ちゃんとソースが取得されたか「c:\temp」フォルダを見てみると、からっぽ。
おかしいなと思いつつリファレンスを調べていると以下の記述があった。

A Working Copy Must Already Exist
The Subversion source control task requires that the working directory already contain a Subversion working copy. If your build policy requires checking out a clean copy, then create a second one inside your build task. CruiseControl.Net is not (yet) able to checkout a clean Subversion working copy from scratch.

なんかようわからんけど、ワーキングディレクトリにはじめの段階でSubversionからソースをチェックアウトしておく必要がありますよということらしい。
なにもない状態からソースをチェックアウトする機能はまだ実装されていないみたい。
じゃあということで、ワーキングディレクトリにソースをチェックアウトしておいて、ついでに別のワーキングコピーに新しいファイルを追加してそれをコミットしておく。
再度、ccnet.exeを起動する。

[3856:DEBUG]
[3856:DEBUG]
[3856:DEBUG]
[3856:DEBUG] hoge
[3856:DEBUG] 2006-12-03T06:25:52.468750Z
[3856:DEBUG]
[3856:DEBUG] /hoge/trunk/100.txt
[3856:DEBUG]

[3856:DEBUG]
[3856:DEBUG]

[3856:DEBUG]

今度は少し変わって、先ほど追加したファイルのコミットメッセージが表示された。
なるほど差分だけをチェックアウトしてくれるのかと思ったら、ワーキングディレクトリにはファイルが追加されていない。
「なんやねん、これ!」と半分きれていたけど、よくリファレンスを調べるとどうやら、これはリポジトリに変更があったかどうかを調べるだけの機能だということがわかった。
本来は同時にソースもチェックアウトするはずやけど、このリリースでは時間がなくてまだ実装されていないらしい。
じゃあ仕方がないから、NAntのタスクでSubversionからソースをチェックアウトすることにする。