visual studio 2008 - Corredor de compilación de línea de comando de TeamCity: ¿Cómo hacer que falle la compilación?
visual-studio-2008 command-line (1)
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 al llamar "devenv.exe" de Visual Studio 2008 y luego ejecuta las pruebas de la unidad y crea la estructura de carpetas correcta.
Lo que nos gustaría hacer es detener la ejecución del archivo bat si falla la llamada a devenv y hacer que TeamCity se dé cuenta de que la compilación ha fallado. Podemos capturar la llamada devenv fallida al verificar el ErrorLevel (que es 1 si la compilación falló) y podemos salir de nuestro archivo de bat en ese momento. Pero, ¿cómo podemos decirle a TeamCity que la compilación falló ?
Esto es lo que hemos intentado:
call "build.bat"
IF ERRORLEVEL 1 EXIT /B 1
Pero TeamCity no reconoce nuestro código de salida. En cambio, el registro de compilación se ve así:
[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í que TeamCity informará que la construcción fue exitosa. como podemos arreglar esto?
Solución:
TeamCity proporciona un mecanismo llamado Mensajes de servicio que se puede usar para manejar situaciones como esta. He actualizado mi script de compilación para parecerse a lo 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á que mi compilación ha fallado debido a un "Error en la compilación".
Ver el tema sobre la interacción del script con TeamCity .
Puede reportar mensajes para el registro de compilación de la siguiente manera:
##teamcity[message text=''<message text>'' errorDetails=''<error details>'' status=''<status value>'']
dónde:
- El atributo de estado puede tomar los siguientes valores: NORMAL, ADVERTENCIA, FALLO, ERROR. El valor predeterminado es NORMAL.
- El atributo errorDetails se usa solo si el estado es ERROR, en otros casos se ignora.
Este mensaje falla la compilación en caso de que su estado sea ERROR y la casilla de verificación "Error de compilación si el corredor de compilación registra un mensaje de error" está marcada en la página de configuración general de la configuración de compilación. Por ejemplo:
##teamcity[message text=''Exception text'' errorDetails=''stack trace'' status=''ERROR'']
Actualización 2013-08-30:
A partir de TeamCity 7.1, las fallas de compilación deben informarse utilizando el mensaje de servicio buildProblem
lugar:
##teamcity[buildProblem description=''<description>'' identity=''<identity>'']