TeamCity のコマンドライン ビルド ランナーを使用してバットファイルを呼び出しています。このバッチ ファイルは、Visual Studio 2008 の "devenv.exe" を呼び出してソリューションをビルドし、ユニット テストを実行して正しいフォルダー構造を作成します。
私たちがやりたいことは、devenv の呼び出しが失敗した場合にバッチ ファイルの実行を停止し、ビルドが失敗したことを TeamCity に認識させることです。ErrorLevel (ビルドが失敗した場合は 1) をチェックすることで、失敗した devenv 呼び出しをキャッチでき、その時点でバット ファイルを終了できます。しかし、ビルドが失敗したことを TeamCity に伝えるにはどうすればよいでしょうか?
これは私たちが試したことです:
call "build.bat"
IF ERRORLEVEL 1 EXIT /B 1
しかし、TeamCity は終了コードを認識しません。代わりに、ビルド ログは次のようになります。
[08:52:12]: ========== Build: 28 succeeded or up-to-date, 1 failed, 0 skipped ==========
[08:52:13]: C:\_work\BuildAgent\work\bcd14331c8d63b39\Build>IF ERRORLEVEL 1 EXIT /B 1
[08:52:13]: Process exited with code 0
[08:52:13]: Publishing artifacts
[08:52:13]: [Publishing artifacts] Paths to publish: [build/install, teamcity-info.xml]
[08:52:13]: [Publishing artifacts] Artifacts path build/install not found
[08:52:13]: [Publishing artifacts] Publishing files
[08:52:13]: Build finished
そのため、TeamCity はビルドが成功したことを報告します。どうすればこれを修正できますか?
解決:
TeamCity は、このような状況を処理するために使用できるサービス メッセージと呼ばれるメカニズムを提供します。ビルド スクリプトを次のように更新しました。
IF %ERRORLEVEL% == 0 GOTO OK
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
EXIT /B 1
:OK
その結果、TeamCity は「コンパイルの失敗」のためにビルドが失敗したと報告します。