Estamos usando el corredor de compilación de línea de comandos de TeamCity para llamar a un archivo bat. El archivo bat construye nuestra solución llamando a "devenv.exe" de Visual Studio 2008 y luego ejecuta las pruebas unitarias y crea la estructura de carpetas correcta.Corredor de compilación de línea de comando de TeamCity: ¿Cómo hacer que falle la compilación?
Lo que nos gustaría hacer es dejar de ejecutar el archivo bat si la llamada a devenv falla y hacer que TeamCity se dé cuenta de que la compilación falló. Podemos detectar la llamada a devenv fallida marcando ErrorLevel (que es 1 si la construcción falló) y podemos salir de nuestro archivo bat en ese momento. Pero ¿cómo podemos decirle al TeamCity que la compilación falló?
Esto es lo que hemos tratado:
call "build.bat"
IF ERRORLEVEL 1 EXIT /B 1
Pero TeamCity no reconoce nuestro código de salida. En cambio, el registro de generación es el siguiente:
[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
Así TeamCity informará de que la construcción se ha realizado correctamente. como podemos arreglar esto?
Solución:
TeamCity proporciona un mecanismo llamado Service Messages que se puede utilizar para manejar este tipo de situaciones. He actualizado mi escritura de la estructura a ser similar al siguiente:
IF %ERRORLEVEL% == 0 GOTO OK
echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text} in compilation']
EXIT /B 1
:OK
Como resultado TeamCity informará mi construcción como fracasó debido a una "falla en la compilación".
¿A dónde va 'GOTO OK'? ¿Y qué es% ERRORLEVEL%? –