Подтвердить что ты не робот

Командная строка TeamCity: как сделать сборку неудачной?

Мы используем бегун командной строки TeamCity для вызова bat файла. Bat файл создает наше решение, вызывая Visual Studio 2008 "devenv.exe", а затем он выполняет модульные тесты и создает правильную структуру папок.

Что нам нужно сделать, так это прекратить выполнение 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 предоставляет механизм, называемый служебные сообщения, который можно использовать для обработки подобных ситуаций. Я обновил мою сборку script, чтобы выглядеть следующим образом:

IF %ERRORLEVEL% == 0 GOTO OK
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
EXIT /B 1
:OK

В результате TeamCity сообщит, что моя сборка не удалась из-за "сбоя в компиляции".

4b9b3361

Ответ 1

См. Тема Script Взаимодействие с TeamCity.

Вы можете сообщать сообщения для журнала построения следующим образом:

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

где:

  • Атрибут статуса может принимать следующие значения: NORMAL, WARNING, НЕИСПРАВНОСТЬ, ОШИБКА. Значение по умолчанию - NORMAL.
  • ОшибкаДетали атрибут используется только в том случае, если статус ОШИБКИ, в других случаях это игнорируются.

Это сообщение не выполняет сборку в случае, если ее статус - ОШИБКА и "Сбой при сбое, если сообщение об ошибке зарегистрировано при запуске сборки" на странице настроек общих настроек конфигурации. Например:

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

Обновление 2013-08-30:

Как и в случае сбоев сборки TeamCity 7.1, следует сообщать с помощью служебного сообщения buildProblem:

##teamcity[buildProblem description='<description>' identity='<identity>']