2010-02-22 12 views
9

Estoy usando msdeploy.exe ejecutado desde TeamCity para implementar proyectos ASP.Net en servidores de etapas, pero si sufre severamente de devolver siempre un estado 0 al salir, incluso cuando genera varios errores. Esto significa que una implementación incorrecta no falla y todo se ve bien.¿Cómo analizo el resultado de msdeploy y fallo una compilación de TeamCity si hay errores?

Así que tengo que analizar la salida y tener que plantear un error, ¿hay una manera fácil de hacer esto? Alternativamente, ¿hay una manera difícil de hacer esto?

Puede ver en el registro de compilación de TeamCity a continuación lo que está sucediendo (errores, pero continúa debido al estado de salida 0).

[17:32:31]: Skip copying Global.asax to obj\Debug\Package\PackageTmp\Global.asax, File obj\Debug\Package\PackageTmp\Global.asax is up to date 
[17:32:31]: C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(1845,5): error : Copying file Web.Debug.config to obj\Debug\Package\PackageTmp\Web.Debug.config failed. Could not find file 'Web.Debug.config'. [C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj] 
[17:32:31]: Done Building Project "C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj" (Package target(s)) -- FAILED. 
[17:32:31]: Build FAILED. 
[17:32:31]: "C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj" (Package target) (1) -> 
[17:32:31]: (ValidateGlobalPackageSetting target) -> 
[17:32:31]: C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(817,5): error : '..\Package\WebApp.zip' exists as a file. You can't package as an archive directory to be the same path as an existing file. Please delete the file before packaging. Alternative,you can call msbuild with /t:CleanWebsitesPackage target to remove it. [C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj] 
[17:32:31]: "C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj" (Package target) (1) -> 
[17:32:31]: (CopyAllFilesToSingleFolderForPackage target) -> 
[17:32:31]: C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(1845,5): error : Copying file Web.Debug.config to obj\Debug\Package\PackageTmp\Web.Debug.config failed. Could not find file 'Web.Debug.config'. [C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj] 
[17:32:31]: 0 Warning(s) 
[17:32:31]: 2 Error(s) 
[17:32:31]: Time Elapsed 00:00:00.87 
[17:32:31]: C:\BuildAgent\work\f3548ee02a6397b9>"C:\Program Files\IIS\Microsoft Web Deploy"\msdeploy.exe -verb:sync -source:Package=Package\WebApp.zip -dest:auto -setParam:"IIS Web Application Name"=MyWebName 
[17:32:32]: Info: Updating setAcl (MyWebName). 
[17:32:32]: Info: Updating setAcl (MyWebName). 
[17:32:32]: Info: Updating setAcl (MyWebName/App_Data). 
[17:32:32]: Total changes: 3 (0 added, 0 deleted, 3 updated, 0 parameters changed, 0 bytes copied) 
[17:32:32]: Process exited with code 0 
[17:32:32]: Build finished 

Respuesta

13

TeamCity 7 tiene unas fallas Construir cuentan:

  • Editar configuración en su configuración de generación
  • Ir a la ficha Condiciones Construir fallo (número 4)
  • clic en 'Añadir acumulación condición de falla '
  • Seleccione' Tipo de construcción en el texto específico en el registro de compilación 'tipo
  • Utilicé la cadena "EXEC: número de error:" para detectar errores MSDeploy, funciona bien
  • El botón Prueba abre un práctico cuadro de diálogo donde puede probar su condición de falla en un registro de compilación anterior que sabe que debería haber fallado
  • Guardar

En mi configuración que estoy invocando msdeploy.exe directamente de MSBuild, yo creo que por eso mi texto de error es diferente a la suya.

JetBrains bastante geniales y cariñosos para esto.

+3

Esta es una buena solución, una que pasé por alto por completo. Funciona bien. Solo como referencia, utilicé la opción de texto de expresión regular con un valor de "Número de errores: [1-999]", que parece funcionar bien para las tareas basadas en MSBuild. – keithl8041

+1

@ keith8041: esto siempre funcionará, pero ten en cuenta que '[1-999]' significa: 'un caracter que puede ser 1 a 9, o 9 o 9', que solo coincide con el primer caracter después de' Cuenta de error: '. Creo que prefirió decir algo como: 'Número de errores: [1-9] [0-9] *'. Nota: solo estoy curioseando aquí. –

3

Aquí es un enfoque que solía construir catpure fracasos de MSDeploy cuando me encontré con un guión Nant para el despliegue de forma remota. No es un escenario idéntico, pero debería darle un concepto desde el cual ir. Básicamente, puede ejecutar esto desde un shell, necesita un lenguaje de script como powershell para capturar el resultado y luego post procesa el texto simple que vuelve de msdeploy. Resolví este problema con el equipo de MSDeploy y les hice saber que esto era un problema.

http://www.lostechies.com/blogs/hex/archive/2009/12/29/update-on-using-msdeploy-for-remote-deployments.aspx

0

En TeamCity 9, vaya a la configuración de compilación y haga clic en las Condiciones de falla. Marque la casilla de verificación "un mensaje de error es registrado por el corredor de compilación". Esto fallará su compilación si ocurre un error durante la implementación.

Cuestiones relacionadas