[アーカイブ] Team Foundation Service Preview で Java / JUnit の継続的インテグレーションを行う

<オリジナル投稿 2012年10月19日 本ポストの情報はオリジナル投稿時点のものです。マイクロソフトの正式な見解や製品の仕様を保証するものではないことをご了承ください。>

Team Foundation Service Preview の Hosted Build (Azure 上でのビルドサービス) は、Java のビルド、JUnit の実行と結果の収集にも対応させることができます。
詳細は、Team Foundation Service のドキュメントにあります (英語):

Set up an Ant build in the cloud
Eclipse から Team Foundation Server / Service に接続する

こちらについては、以前に書きましたので、そちらをご覧ください。

TFS のクロスプラットフォーム接続用クライアント Team Explorer Everywhere 2012 のセットアップ
Hosed Build の仮想ビルドサーバーに Java 環境を整える

まずやることは、Java と Ant を Team Foundation Service Preview のソース管理下に置き、Azure 上の Hosted Build で使えるようにすることです。
まずソース管理下に適当なフォルダを作成します。直下に Tools とか作るといいですね。
image
フォルダの作成は、右クリックすればメニューにでてきます。ただし、ローカルにマップがなされていないとフォルダの作成はできないと思いますので、チームプロジェクト名のフォルダ(ルートです)をローカルのどこかにマップしていない場合は、マップしておいてください。
ここで、新技を使います!
.tfIgnore ファイルです!このファイル内で指定されたファイル規則は、ソース管理下に格納されなくなります。
Tools\Java\.tfIgnore を作成し、中身は先ほど紹介したドキュメントのとおりにしましょう。

#Example .tfIgnore file for Java
src.zip
\sample
\demo
\db
!*.exe
!*.dll
\lib\visualvm\

ドキュメントのようにコマンドラインからファイルを作るといいです。Windows エクスプローラーからは、 .tfIgnore のように . から始まるファイルは作成できないので。

>notepad <foloder>\.tfIgnore

のようにです。
image
同様に、Ant についても .tfIgnore を作成します。
image
そうしたら、Java と Ant のファイルをこれらのフォルダにコピーします。Java については jre も忘れずにコピーしておいてくださいね。
コピーがすんだら、Eclipse に戻ってきて、Team Explorer で、 [Pending Changes] を開きます。Action で [Detect Local Changes] を選び反映します。
image
そして [Detected Changes] ハイパーリンクをクリックし、
image
プロモートします。
そして、Java と Ant の必要なファイルをチェックインして Team Foundation Service のリポジトリに格納します。
image
おぜん立ては、以上で終了です。

ビルド定義を作成する

Team Foundation Service のビルド定義を作成します。Team Explorer で [Builds] を選択します。
image
「New Build Definition」で新規にビルド定義を作成します。
image
適切なビルド定義名を入力します。
image
ビルドをキックするトリガーを決めます。ここでは、継続的インテグレーションの進化形のゲートチェックインに設定してます。
次に、ワークスペースを設定します。先ほど準備した Java と Ant の設定を忘れないようにするのが注意点です。
image
次に、ビルドの設定です。
image
ビルドコントローラーとして、Azure 上のビルドコントローラーである「Hosted Build Controller」を選択します。
そして、ステージング場所 (ドロップ フォルダ) として、ソース管理下のドロップ場所を指定します。上図のような感じでしていします。UNCパスではない点に注意してください。クラウド上のビルドサーバーなので、UNC パスではアクセスできませんので。
次に、プロジェクトファイルを選択します。ここからだけ少しだけ注意してください。
image
ここで、プロジェクトファイルがないので、MSBuild 用のプロジェクトファイルを作成します。[Create]ボタンをクリックです。
image
Ant か Maven のファイルを選択します。
image
Ant だとこんな感じですね。
image
はい。こんな感じです。
あとは、[OK] ボタンを押してビルド定義を作成してください。

JAVA_HOME と ANT_HOME を設定する

作成した MSBuild のファイルから Ant と Java を設定したソース管理下から呼び出さなければならないため、ANT_HOME と JAVA_HOME を設定する必要があります。そのため、TeamBuildTypes フォルダ下の TFSBuild.proj を編集する必要があります。Team Explorer の Builds にある先ほど作ったビルド定義を右クリックすると、「View Build Configuration Folder」 があります。
最新を取得 (Get Latest Version) で TFSBuild.proj を取得し、編集します。
<ItemGroup>の前に、下記を追記します。

<PropertyGroup>
<JAVA_HOME>$(SolutionRoot)\Tools\Java</JAVA_HOME>
<ANT_HOME>$(SolutionRoot)\Tools\Ant</ANT_HOME>
</PropertyGroup>

Eclipse でファイル比較すると以下の感じです。
image
追記したら保存し、チェックインしておきます。

クラウド上での Java ビルドの動作を確認する

さて、あとは、ビルドをキックしてみましょう。今回の設定は、継続的インテグレーション(の進化形のゲートチェックイン)に設定していますが、もちろん、手動でキックすることができます。
image
「Queue New Build」を選択します。
image
ダイアログでは特になんもする必要はありません。「Latest Sources」になっていない場合は、ここだけ変えてください(ビルドのお試しなので)。
ビルド エクスプローラーで、
image
チーム エクスプローラーのビルドで、
image
となっていれば、ビルドがキューに入り、開始されることがわかります。
実行中は、それぞれ、アイコンが変わりますので、実行していることがわかります。もちろん、進行状況もみることができます。
image
ビルド(Java のビルドと JUnit によるテスト)が終われば、ビルド レポートでいつでも結果を追跡できます。
image
見てください!ビルドの結果だけでなく、JUnit の結果も記録されています。Team Foundation Service Preview で無事に Java のビルドと JUnit でのテストが実施でき、結果を収集できていることがわかります。
今回は、試しで実施したため、関連する変更セット(Associated Changesets)と関連する作業項目(Associated Work Items)が空になっていますが、ソースコードを変更し、CI を行えば、これらに、ソースコードの変更セットIDと、動機にあたるタスクやバグ修正の作業項目IDがハイパーリンク付きで、記録され、いつでも詳細を追跡することができます。
ここまで統合された TFS のメリットを Java などの開発でも活かせるのはとても便利ではないでしょうか?今回は、Windows 上の Eclipse からやってみましたが、Mac OS X でも、Linux でも、Solaris, その他の UNIX でも同じことができます。
でも、これだけではないのです!

Eclipse でも、 Visual Studio でも、Web でもどこからでもビルド、結果の確認

今回ビルドの設定、実行を Eclipse から見てきました。TFS (Server も Service も)の大きなメリットは、技術に関わらず、開発りリソースを横ぐしに扱えることになります。どういうことかというと、

  • Visual Studio から Java アプリのビルドを実行 / 結果の閲覧と追跡
  • Eclipse から .NET や Win32 Native アプリのビルドを実行 / 結果の閲覧と追跡
  • TFS 2012 / Team Foundation Service Preview でビルドの実行 / 結果の閲覧と追跡

が行えます。
image
こちらは、Eclipse から .NET アプリのビルド結果を見ています(先ほど説明した、関連する変更セットとタスクの状況も見れますね)。
次に、
image
こちらは、Visual Studio から Java アプリのビルド結果を見ています。さらに JUnit の詳細な結果も Visual Studio で MSTest や NUnit, xUnit.net, QUnit を実行したときと同じようにみることができます。
image
これで、Visual Studio を使っている開発者は、Visual Studio から、Eclipse を使っている開発者は、Eclipse から技術をまたがった操作も行えることがわかりますね。お互いの状況を把握しながら作業に専念できる環境があるということです。
最後に、Web からの操作を見ておきましょう。
image
このように、Eclipse / Visual Studio からのビルドのキックと同様に Web からもビルドをキックできます。
image
ビルド結果の詳細も見れます。Web, Eclipse, Visual Studio 共通ですが、タスクやバグ、変更セットの情報もワンクリックで見ることができます。
image
こちらは、関連するタスクをクリックしたところです。タスクのワークフローで誰が何をやったのかも Web だと容易に確認できます。HISTORY から LINKS に切り替えれば、このタスクと関連する変更セットの一覧を得ることができます。
image
ビルドレポートで、変更セットをクリックする(上記の変更セットリンクをクリックしても同様)と、
image
変更セットの詳細情報に飛ぶことができます。どのファイルを編集したのか、追加/削除したのかがすぐにわかります。タブを Summary から Work Items に切り替えるとこの変更セットに関連する作業項目の状態を知ることができます。
image
このように、変更セット⇔タスクやバグ とそれらの集合体であるビルドとこれらの関連がいつでも追跡可能になるわけです。これが、特別何かをしなくても得られる TFS の効果を .NET や Windows アプリ開発だけでなく、Java などの開発、そして Eclipse やコマンドラインからアクセスでき、ビルドも自動化できるのが TFS です。
今回は、Team Foundation Service Preview での Java のビルドを中心にし、その効果を見てきました。これは、当然ですが、 TFS 2012 でも同様のことが行えます。
そうそう、Team Foundation Service Preview の Hosted Build Service ではなく、オンプレミスのビルド サービスを呼び出してしまうこともできます。これを使って Java アプリのビルドを行うことも当然可能です。Team Foundation Service から、オンプレミスの TFS ビルド サービスを呼び出し、ビルドとテストをさせる方法は、以前に書きましたので、興味のある方は、こちらもご覧ください。

Team Foundation Service でクラウドとオンプレミス上のビルドサービスでCI環境を構築する (Windows ストアアプリの自動ビルド設定紹介つき)