我们正在使用teamcity的命令行build runner调用BAT文件。BAT文件通过调用Visual Studio 2008的“devenv.exe”来构建我们的解决方案,然后执行单元测试并创建正确的文件夹结构。
如果对devenv的调用失败,我们希望停止执行BAT文件,并使teamcity认识到构建失败。我们可以通过检查
错误级别
(如果构建失败,则为1),此时我们可以退出BAT文件。但是
我们怎样才能告诉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提供了一种称为
Service Messages
它可以用来处理这样的情况。
我已经更新了构建脚本,如下所示:
IF %ERRORLEVEL% == 0 GOTO OK
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
EXIT /B 1
:OK
因此,TeamCity将报告我的构建因“编译失败”而失败。