TeamCity command line build runner: ¿Cómo hacer que la compilación falle?


Estamos usando el corredor de compilación de línea de comandos de TeamCity para llamar a un bat-file. El bat-file construye nuestra solución llamando a Visual Studio 2008 "devenv.exe " y luego ejecuta las pruebas unitarias y crea la estructura de carpetas correcta.

Lo que nos gustaría hacer es dejar de ejecutar el bat-file si la llamada a devenv falla y hacer que TeamCity se dé cuenta de que la compilación falló. Podemos capturar la llamada fallida devenv marcando el ErrorLevel (que es 1 si la compilación falló) y podemos salir de nuestro bat-file 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 su lugar, 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

Entonces TeamCity reportará que la compilación fue exitosa. ¿Cómo podemos arreglar esto?

Solución:

TeamCity proporciona un mecanismo llamado Mensajes de servicio que se puede utilizar para manejar situaciones como este. He actualizado mi script de compilación para que tenga el siguiente aspecto:

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

Como resultado, TeamCity reportará mi compilación como fallida debido a un "Fallo en la compilación".

Author: ChrisFletcher, 2010-09-09

1 answers

Ver Interacción del script de compilación con TeamCity tema.

Puede reportar mensajes para el registro de compilación de la siguiente manera:

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

Donde:

  • El atributo status puede tomar los siguientes valores: NORMAL, ADVERTENCIA, FRACASO, ERROR. El valor predeterminado es NORMAL.
  • Los detalles erróneos atributo se utiliza solo si el estado es ERROR, en otros casos es ignorar.

Este mensaje falla en la compilación en caso de que su el estado es ERROR y "Falla en la compilación si un mensaje de error es registrado por build runner" la casilla de verificación es comprobado en la página de configuración general de compilación. Por ejemplo:

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

Actualizar 2013-08-30:

A partir de TeamCity 7.1 los fallos de compilación deben ser reportados usando el buildProblem mensaje de servicio en su lugar:

##teamcity[buildProblem description='<description>' identity='<identity>']
 21
Author: Sergey Mirvoda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-30 09:22:49