27

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 は「コンパイルの失敗」のためにビルドが失敗したと報告します。

4

1 に答える 1

21

TeamCityトピックとのスクリプト相互作用のビルドを参照してください。

次の方法で、ビルド ログのメッセージを報告できます。

##teamcity[message text='<message text>' errorDetails='<error details>' status='<status value>']

どこ:

  • status 属性は、NORMAL、WARNING、FAILURE、ERROR の値を取ることができます。デフォルト値は NORMAL です。
  • errorDetails 属性は、ステータスが ERROR の場合にのみ使用され、それ以外の場合は無視されます。

このメッセージは、ステータスが ERROR で、 ビルド構成の一般設定ページで[ビルド ランナーによってエラー メッセージがログに記録された場合にビルドを失敗させる]チェックボックスがオンになっている場合、ビルドに失敗します。例えば:

##teamcity[message text='Exception text' errorDetails='stack trace' status='ERROR']

2013 年 8 月 30 日更新:

TeamCity 7.1 以降、ビルドの失敗は、buildProblem代わりにサービス メッセージを使用して報告する必要があります。

##teamcity[buildProblem description='<description>' identity='<identity>']
于 2010-09-09T06:14:21.947 に答える