Средство выполнения сборки из командной строки TeamCity: как заставить сборку завершиться ошибкой?

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

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

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

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


person Mikael Koskinen    schedule 09.09.2010    source источник
comment
Куда GOTO OK идти? А что такое% ERRORLEVEL%?   -  person Tomas Jansson    schedule 06.10.2011


Ответы (1)


См. Взаимодействие скрипта сборки с TeamCity .

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

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

где:

  • Атрибут status может принимать следующие значения: NORMAL, WARNING, FAILURE, ERROR. Значение по умолчанию - НОРМАЛЬНОЕ.
  • Атрибут errorDetails используется только в том случае, если статус - ERROR, в других случаях он игнорируется.

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

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

Обновление 30.08.2013:

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

##teamcity[buildProblem description='<description>' identity='<identity>']
person Sergey Mirvoda    schedule 09.09.2010
comment
Спасибо! Я смог заставить эту вещь работать, используя сообщение buildStatus. Я обновлю исходный пост, добавив эту информацию. - person Mikael Koskinen; 09.09.2010
comment
Это также работает со сценариями PowerShell, например. echo "##teamcity[message text='oops' errorDetails='' status='ERROR']" - person Chris S; 27.01.2012