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".
Dove va 'GOTO OK'? E cos'è% ERRORLEVEL%? –