Сборщик команд командной строки 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 сообщит о моей сборке как о сбое из-за "Сбой при компиляции".
1 ответ
См. Раздел Взаимодействие сценариев сборки с TeamCity.
Вы можете сообщить о сообщениях для журнала сборки следующим образом:
##teamcity[message text='<message text>' errorDetails='<error details>' status='<status value>']
где:
- Атрибут состояния может принимать следующие значения: NORMAL, WARNING, FAILURE, ERROR. Значением по умолчанию является НОРМАЛЬНОЕ.
- Атрибут errorDetails используется только в том случае, если в статусе указано ERROR, в других случаях он игнорируется.
Это сообщение дает сбой при сборке, если его состояние равно ERROR, и на странице общих настроек конфигурации сборки установлен флажок "Сбой при сборке, если сообщение об ошибке зарегистрировано сборщиком сборок". Например:
##teamcity[message text='Exception text' errorDetails='stack trace' status='ERROR']
Обновление 2013-08-30:
Начиная с TeamCity 7.1, об ошибках сборки следует сообщать, используя buildProblem
вместо этого служебное сообщение:
##teamcity[buildProblem description='<description>' identity='<identity>']