2010-09-09 16 views
27

Usiamo il runner build line di TeamCity per chiamare un file bat. Il file bat crea la nostra soluzione chiamando il "devenv.exe" di Visual Studio 2008, quindi esegue i test unitari e crea la struttura di cartelle corretta.Runner build riga di comando di TeamCity: come si fa a fallire la compilazione?

Quello che vorremmo fare è smettere di eseguire il file bat se la chiamata a devenv fallisce e fare in modo che TeamCity realizzi che la compilazione fallisce. Possiamo prendere la chiamata fallita controllando il numero di errore (che è 1 se la compilazione è fallita) e possiamo uscire dal nostro file bat in quel punto. Ma come possiamo dire a TeamCity che la build è fallita?

Questo è ciò che abbiamo provato:

call "build.bat" 
IF ERRORLEVEL 1 EXIT /B 1 

Ma TeamCity non riconosce il nostro codice di uscita. Invece il registro di build è simile al seguente:

[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 

Quindi TeamCity segnalerà che la compilazione ha avuto successo. come possiamo fissare questo?

Soluzione:

TeamCity fornisce un meccanismo chiamato Service Messages che può essere utilizzato per gestire situazioni come questa. Ho aggiornato il mio script di build a guardare come il seguente:

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

Come risultato TeamCity riporterà la mia build riuscita a causa di un "fallimento nella compilation".

+1

Dove va 'GOTO OK'? E cos'è% ERRORLEVEL%? –

risposta

21

Vedere argomento Build Script Interaction with TeamCity.

È possibile segnalare i messaggi per log di compilazione nel seguente modo:

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

dove:

  • L'attributo di stato può assumere i seguenti valori: normale, allarme, GUASTO, ERRORE. Il valore predefinito è NORMAL.
  • L'attributo errorDetails viene utilizzato solo se lo stato è ERROR, in altri casi è ignorato.

Questo messaggio fallisce la configurazione in caso il suo stato è ERROR e "Fail costruire se un messaggio di errore viene registrato da costruzione corridore" casella di controllo è verificata sulla configurazione di generazione pagina delle impostazioni generali. Per esempio:

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

Aggiornamento 2013/08/30:

partire dal TeamCity 7.1 errori di compilazione devono essere segnalati utilizzando invece il messaggio di servizio buildProblem:

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

Grazie! Sono stato in grado di far funzionare la cosa usando il messaggio buildStatus. Aggiornerò il post originale con queste informazioni. –

+3

Funziona anche con script PowerShell, ad es. 'echo" ## teamcity [messaggio text = 'oops' errorDetails = '' status = 'ERRORE'] "' –

Problemi correlati