2010-09-09 16 views
27

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".

+1

¿A dónde va 'GOTO OK'? ¿Y qué es% ERRORLEVEL%? –

Respuesta

21

Véase Build Script Interaction with TeamCity tema.

Puede reportar mensajes de registro de generación de la siguiente manera:

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

donde:

  • 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 estructura en caso de que su estado es ERROR y "Fail construir si aparece un mensaje de error se registra por el corredor de construcción" casilla de verificación está marcada en configuración de generación página de configuración general. Por ejemplo:

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

Actualización 30/08/2013:

A partir del 7 TeamCity.1 fallas de compilación deben ser reportadas usando el mensaje de servicio buildProblem en su lugar:

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

¡Gracias! Pude hacer que funcionara usando el mensaje buildStatus. Actualizaré la publicación original con esta información. –

+3

Esto también funciona con los scripts de PowerShell, p. 'echo" ## teamcity [message text = 'oops' errorDetails = '' status = 'ERROR'] "' –

Cuestiones relacionadas