Używamy programu TeamCity do budowania linii poleceń, aby wywołać plik nietoperza. Plik bat buduje nasze rozwiązanie, wywołując "devenv.exe" Visual Studio 2008, a następnie wykonuje testy jednostkowe i tworzy poprawną strukturę folderów.Tworzenie linii komend TeamCity: jak spowodować awarię kompilacji?
To, co chcielibyśmy zrobić, to przerwać wykonywanie pliku nietoperza, jeśli połączenie z devenv nie powiedzie się i sprawić, że TeamCity zorientuje się, że kompilacja nie powiodła się. Możemy złapać nieudane wywołanie devenv, sprawdzając ErrorLevel (co jest 1, jeśli kompilacja nie powiodła się) i możemy w tym momencie opuścić nasz plik bat. Ale jak możemy powiedzieć TeamCity, że kompilacja nie powiodła się?
To, co staraliśmy:
call "build.bat"
IF ERRORLEVEL 1 EXIT /B 1
Ale TeamCity nie rozpoznaje nasz kod wyjścia. Zamiast tego dziennik budowy wygląda następująco:
[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
Tak więc TeamCity poinformuje, że kompilacja się powiodła. Jak możemy to naprawić?
Rozwiązanie:
TeamCity zapewnia mechanizm zwany Service Messages który może być używany do obsługi takich sytuacji. zaktualizowałem mój skrypt do budowania wyglądać następująco:
IF %ERRORLEVEL% == 0 GOTO OK
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
EXIT /B 1
:OK
Wskutek TeamCity zgłosi mój build jak powiodło się z powodu „awarii w kompilacji”.
Gdzie jest "GOTO OK"? A czym jest% ERRORLEVEL%? –