10

Tenemos una solución de Visual Studio bastante compleja (57 proyectos, 19 de los cuales son sitios web que no se compilan casi siempre cuando se activa presionando código, pero luego activamos manualmente la compilación y en el reintento, se compila muy bien.La creación de sitios web de Visual Studio falla intermitentemente en el servidor de CI

La solución contiene 57 proyectos, 19 de los cuales son proyectos de sitio web. (No proyectos de aplicaciones web, no hay archivo .csproj). El resto son bibliotecas de clases y trabajos en segundo plano. los proyectos del sitio web están estructurados en directorios virtuales de IIS en un gran sistema de administración de contenido multifuncional.

El servidor de compilación es Hudson v1.395. El comando utilizado para compilar es:

"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" "SolutionName.sln" /rebuild Debug 

Cuando la generación falla, lo hace siempre en el mismo proyecto exacta sitio web, con exactamente el mismo mensaje:

------ Rebuild All started: Project: C:\...\WebsiteName\, Configuration: Debug Any CPU ------ 
Validating Web Site 
: Build (web): The application domain in which the thread was running has been unloaded. 

Validation Complete 

Un Google Search for this message es actualmente menos de ayudar. This link se acerca más al problema real pero no tiene resolución. Obviamente, no estamos cambiando ningún archivo de solución durante la compilación porque está ocurriendo en el servidor de compilación.

Cuando falla, que desencadenan la acumulación de forma manual, y obtenemos como esperamos (lo siento, redactada):

------ Rebuild All started: Project: C:\...\News2\, Configuration: Debug Any CPU ------ 
Validating Web Site 
Building directory '/WebsiteName/Dir1/Dir2/'. 
Building directory '/WebsiteName/'. 
Building directory '/WebsiteName/Dir3/'. 
// 22 more but you get the point 

// A few warnings caused by our own use of the ObsoleteAttribute, nothing to be concerned about 
Validation Complete 

Lo que podría causar este dominio de aplicación descargado mensaje?

Algunas otras notas:

  • pensamos que podría ser Hudson funcionamiento de la memoria, porque nosotros observamos java fugas que un poco. Entonces, agregamos una tarea para reiniciar el servicio Hudson cada mañana a las 6 a. M. Incluso con esto y una buena cantidad de memoria disponible listo para funcionar durante la compilación, aún falló.
  • Una inserción en el mismo repositorio también provoca la creación de una solución mucho más simple (solo 22 proyectos, sin proyectos de sitios web) al mismo tiempo. Ese siempre tiene exito. Además, se activan manualmente para que ambos se ejecuten al mismo tiempo.
  • Sé que debemos actualizar Hudson, pero ese es siempre uno de esos proyectos de backburner que nunca parece tener tiempo para. En cualquier caso, creo firmemente que se trata de un problema de Visual Studio/MSBuild, no de un problema de Hudson.

Edición 1: MSBuild

El problema con MSBuild es que hay tantos pequeños caprichos que difieren de una acumulación en Visual Studio. Es extremadamente frustrante para una solución compilar en Visual Studio en una máquina de desarrollo y luego fallar en el servidor de compilación. Incluso el resultado de msbuild es drásticamente diferente (mucho más detallado por una parte) de lo que nuestros desarrolladores ven en su ventana de generación de resultados. ¿Hay indicadores de línea de comando adicionales que hagan que la salida de MSBuild esté más en línea con lo que obtienes en la ventana de compilación de Visual Studio?

También hay otras cosas que son incómodas. Si tiene una carpeta de solución con el mismo nombre que un proyecto, MSBuild arroja un error, pero Visual Studio lo soluciona perfectamente. Esas son las peculiaridades que realmente te hacen arrancarte el pelo.

Respuesta

2

No estoy tan familiarizado con Hudson o proyecto de sitio web (utilizo TeamCity y proyectos de aplicaciones web), pero pensé que lanzaría un par de cosas para ver si eso ayudaría.

¿Ha intentado crear la solución usando MSBuild directamente en lugar de usar Visual Studio? El comando sería algo como esto:

%windir%\Microsoft.NET\Framework\<version>\MSBuild SolutionName.sln /t:Rebuild /p:configuration=debug 

me di cuenta de que no estaban pasando el modificador de línea de comandos para el estudio visual para cerrar después de la construcción es RunExit completa/MSDN Link Entonces, ¿podría ser que el IDE de Visual Studio está abriendo en su servidor de compilación para cada compilación y no cerrando? Pude ver varias instancias del IDE que tiene la misma solución abierta y causa problemas.

Recomendaría si fuera posible ejecutar su compilación utilizando MSBuild en lugar de Visual Studio a menos que tenga una dependencia en algo dentro del IDE. Debería, al menos, obtener tiempos de compilación más rápidos porque no tendrá que cargar Visual Studio y eliminará una capa de complejidad en su proceso de compilación.

¡Espero que esta ayuda!

+0

En cuanto a MSBuild, consulte "Editar 1" que adjunté a mi pregunta. Si bien no es mi opción favorita, lo intentaré. Voy a probar/RunExit también, aunque no observamos casos devenidos en el servidor. También una aclaración: a pesar de que son * del * mismo repositorio, ambas soluciones son clones completos por lo que no hay intercambio de ningún tipo entre las dos instancias devenv simultáneas. –

+0

con respecto a los niveles de registro en MSBuild, puede cambiarlo usando el indicador/verbosity [enlace de MSDN] (http://msdn.microsoft.com/en-us/library/ms164311.aspx) –

+0

** Esta opción no está disponible para Visual Studio 7.0-9.0 (2003-2008) y proyectos C++! ** (VS 10.0 convierte proyectos C++ a msbuild, por lo que es posible allí). –

2

Otra compilación simultánea que se ejecuta como resultado de la misma revisión parece estar relacionada. Un recurso que se va en medio de mi compilación mientras se ejecuta una compilación relacionada me hace sospechar de la compilación relacionada.

Sé que has dicho que puedes ejecutarlos al mismo tiempo manualmente y todo está bien. Aunque me huele a una condición de carrera. Intenta deshabilitar el activador automático en los proyectos más pequeños y cometerlo como un control de cordura final para asegurarte de que no te esté molestando.

Imagino que si no sospechas nada, no lo habrías mencionado en tu publicación. Descarta eso.

6

Tuve un problema con las compilaciones de C++ en Hudson/Jenkins, que probablemente esté relacionado, si tienes dos compilaciones funcionando a la vez, pueden suceder cosas malas.

Esto se debe a que Hudson/Jenkins ejecutará un asesino de árbol de procesos para limpiar los procesos al final de una compilación, y MsBuild/VisualStudio compartirá algunos procesos comunes entre compilaciones.

El problema real que tuve con el C++ sí construye manifiesta como otro error:

fatal error C1090: PDB API call failed, 
error code '23' : '( 

se planteó aquí la cuestión:

https://issues.jenkins-ci.org/browse/JENKINS-9104

Apagar el asesino árbol de procesos pueden resolver su problema.

Cuestiones relacionadas