2010-09-09 9 views
27

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”.

+1

Gdzie jest "GOTO OK"? A czym jest% ERRORLEVEL%? –

Odpowiedz

21

Zobacz temat: Build Script Interaction with TeamCity.

można zgłaszać wiadomości do dziennika budowy w następujący sposób:

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

gdzie:

  • atrybut status może podjąć następujące wartości: normal, ostrzeżenie, niepowodzenia, BŁĄD. Domyślna wartość to NORMAL.
  • Atrybut errorDetails jest używany tylko wtedy, gdy status to ERROR, w innych przypadkach jest ignorowany .

Ta wiadomość nie kompilacji w przypadku jego status jest ERROR i „Fail budować Jeśli komunikat o błędzie jest rejestrowany przez build biegacza” pole wyboru jest zaznaczone na konfiguracji kompilacji ogólnej stronie ustawień. Na przykład:

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

Aktualizacja 30.08.2013:

Od TeamCity 7.1 awarie kompilacji należy zgłaszać, używając zamiast tego wiadomości serwisowej buildProblem:

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

Dziękujemy! Udało mi się sprawić, że to działa, używając komunikatu buildStatus. Zaktualizuję oryginalny post z tymi informacjami. –

+3

Działa to również ze skryptami powershell, np. 'echo" ## teamcity [message text = 'oops' errorDetails = '' status = 'ERROR'] "' –

Powiązane problemy