Jenkinsによるテストの自動化
はじめに
Jenkinsの話(CIの話)を聞き、テストの自動実行がとても魅力的に感じたので、
空きPCに環境構築して体験してみた。
やりたいこと
- VisualStudioのソリューションファイルをビルドする。
- MSTestを使ったユニットテストの実行。
- ユニットテストの失敗時に通知する。
※Jenkins端末はインターネットに接続できないローカルLANに配置する予定な為、
通知の手段にIPMessenger(IP Messenger 開発研究室)を使用することにした。メール通知は今回は試してません。
インストール
今回はTracLightningというプロジェクト管理ツールを使用した。(これにJenkinsが含まれている)
Trac Lightning プロジェクト日本語トップページ - SourceForge.JP
プラグインのインストール
ソリューションファイルをビルドするために、Jenkins MSBuild Plugin
MSTestでの失敗を検出するために、Log Parser Plugin
をインストールしました。
※画像ではインストール済タブに表示されていますが、未インストール時には利用可能タブに表示されています。
チェックを入れてページ最下部のインストールボタンクリックでインストールされます。
プラグインの設定
Jenkinsの管理を選択し、管理ページを表示させる。
管理項目にインストールしたプラグインの設定項目が追加されている。
ジョブの登録
ジョブ=ビルド単位といったところでしょうか。ビルドしたいソリューションごとにジョブを作成する必要があります。
ジョブカレントディレクトリは、C:\TracLight\projects\hudson\.hudson\jobs\<ジョブ名>(デフォルト)です。
2,ジョブ名と種類を選択する。種類はフリースタイル・プロジェクト
3,今回はSubversionからソースコードを取得してビルドを行うので、設定する。
使用しない場合は"なし"を選択する。
4,リポジトリの更新確認を定期的に行う場合の設定
画像だと、毎時0分(15:00、16:00、、、) にチェックを行いリビジョンが更新されている場合にビルドを行う。
5,ビルドするソリューションファイルの設定
はじめにMSBuild用のビルド設定項目を追加。
[
追加された項目へ対象のソリューションファイルを指定する。
ソース管理を使用しない場合は、ソリューションファイルのフルパスを指定する。
6,テスト実行の設定
はじめにMSTestを実行するバッチ設定項目を追加。
MSTest実行バッチは下記の通り。失敗時にIPMessengerを使用した通知も行なっている。
setlocal set MS_TEST_DIR="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\" set IPMSG_DIR="C:\Program Files\IPMsg\" set PATH=%PATH%;%MS_TEST_DIR%;%IPMSG_DIR% rem Jenkinsジョブルートを起点とした相対パス set TEST_DLL_NAME="TestProject1\bin\Debug\TestProject1.dll" set TRX_FULLPATH="TestResults\TestResults.trx" set NOTICE_TARGET_HOST=192.168.111.104 set NOTICE_MSG=JenkinsSampleのテストに失敗しました! rmdir /S /Q TestResults mkdir TestResults MSTest.exe /testcontainer:%TEST_DLL_NAME% /resultsfile:%TRX_FULLPATH% if not %ERRORLEVEL% == 0 ( IPMsg.exe /msg %NOTICE_TARGET_HOST% %NOTICE_MSG% echo "UnitTest is Failed" ) endlocal EXIT \B %ERRORLEVEL%
Jenkinsジョブではバッチファイルの実行結果が検出できないようなので、Log Parser Pluginで検出させる必要がある。
保存ボタンクリックしないと設定情報が反映されないので注意。
プラグインの設定で指定した空ファイルへ、テスト失敗時に出力される文字列を指定する。
error /^"UnitTest is Failed"$/