2012-02-14 8 views
5

Estoy creando una captura de pantalla cuando mi prueba de extremo a extremo NUnit falla y estoy tratando de publicarla con TeamCity (agente de creación y servidor ambos en Windows) usando el siguiente mensaje de servicio (como se describe here) que estoy escribiendo con Console.WriteLine de una prueba de NUnit:¿Por qué mis artefactos publicados durante la compilación utilizando el mensaje de servicio publishArtifacts aparecen en TeamCity?

##teamcity[publishArtifacts 'C:\BuildAgent\work\xxxxxxxxxxxxxxxx\Path\To\My\Stuff\fail.png'] 

veo la línea en el registro de generación:

------- Stdout: ------- 
##teamcity[publishArtifacts 'C:\BuildAgent\work\xxxxxxxxxxxxxxxx\Path\To\My\Stuff\fail.png'] 

Pero TeamCity no recoge el archivo, o al menos que no se muestra en la construcción artefactos. ¿Cómo hago que esto funcione?

+1

¿Es posible que el mensaje contiene algunos caracteres que deben ser escaparon: http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ServiceMessages? –

+0

No, siempre que ':' y '\\' estén bien (y lo parezcan), ese no es el problema. – GraemeF

Respuesta

0

Intente utilizar rutas relativas. Teamcity debería resolverlos contra el directorio de trabajo de compilación.

0

Puede intentar Console.Write en lugar de Console.WriteLine (consulte a continuación).

De todos modos, creo que TeamCity no atrapa estos mensajes porque son 'informes de prueba' y se anexan en el registro de construcción como salida de texto.

Mi sensación es que no se analizan y no se interpretan por el comportamiento de interacción de guión de compilación debido a la forma en que se eliminan en el registro de compilación.

Desde el Build Script Interaction (TC 7):

Los mensajes de servicio se utilizan para transmitir órdenes/construir información para servidor TeamCity de la escritura de la estructura. Para ser procesados ​​por TeamCity deben imprimirse en la secuencia de salida estándar de la compilación (de lo contrario, si la salida no está en la sintaxis del mensaje de servicio, debe aparecer en el registro de compilación). Un mensaje de servicio único debería no contener un carácter de nueva línea dentro, no debe abarcar líneas múltiples.

Debe colocar los artefactos de prueba en una carpeta específica y retrasar la publicación después de las pruebas.

Tenga en cuenta que si no necesita resolver el artefacto dinámicamente, debe usar la manera más simple: Artifact paths en la configuración general de la configuración de compilación.

+0

'Console.WriteLine' agrega una nueva línea * después * del mensaje de servicio, por lo que ese no es el problema. Como dice la cita, los mensajes de servicio solo deben escribirse en la secuencia de salida estándar de la compilación: la forma en que se eliminan es irrelevante. Lamentablemente, ya no tengo acceso al proyecto para probar otra cosa :( – GraemeF

+0

Sí, sobre WriteLine, solo para probar. Tampoco funciona en mi TC.Acerca de la descarga de la salida de NUnit, no es totalmente irrelevante porque ** las salidas de las pruebas no son salidas estándar **, cada marco de prueba agrega su propio oyente de la consola. Si ejecuta el 'nunit-console.exe', verá que el' WriteLine' de su prueba aparece de alguna manera a granel. Además, TeamCity usa su propio corredor NUnit. Tenga en cuenta que lo que está intentando no funciona con MSTest tampoco. Puede ver algo como '[Test Output]' después del nombre de la prueba y antes de su salida también, puede fallar debido a este texto. Probablemente un error? – JoeBilly

Cuestiones relacionadas