Сборщик команд командной строки TeamCity: как сделать сборку неудачной? - PullRequest
27 голосов
/ 09 сентября 2010

Мы используем сборщик командной строки 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 сообщит о моей сборке как о сбое из-за "Сбой при компиляции".

1 Ответ

21 голосов
/ 09 сентября 2010

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

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

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

где:

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

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

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

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

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

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