Мы используем бегун командной строки TeamCity для вызова bat-файла. Bat-файл создает наше решение, вызывая Visual Studio 2008 «devenv.exe», а затем выполняет модульные тесты и создает правильную структуру папок.Командная строка TeamCity: как сделать сборку неудачной?
Что мы хотели бы сделать, это прекратить выполнение bat-файла, если вызов devenv не удался и заставить TeamCity понять, что сборка завершилась неудачно. Мы можем поймать неудавшийся вызов devenv, проверив ErrorLevel (который равен 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 сообщит мой билд, как не удалось из-за «сбоя в компиляции».
Где находится «ГОТО ОК»? А что такое% ERRORLEVEL%? –