En nuestra tienda de desarrollo de software .NET, tenemos CruiseControl.NET configurado para construir 28 proyectos, algunos de los cuales son interdependientes. Cada proyecto representa aproximadamente un proyecto de Visual Studio o una biblioteca Flex emparejada con pruebas unitarias. Lo que me molesta es que no he encontrado una buena manera de garantizar que los proyectos se construyan en un orden que represente las dependencias.Orden de compilación en CruiseControl.NET con dependencias de proyecto
Esto es lo que estoy haciendo:
- Todo está en la misma cola de construcción. Hice esto para que las compilaciones se realicen de forma secuencial, por lo que puedo evitar la necesidad de varios directorios de trabajo.
- Establecí prioridades de cola en los proyectos, lo que pensé que influiría en su orden de compilación. Pero después de leer la documentación con más cuidado, descubrí que simplemente controla la priorización cuando hay varias solicitudes de compilación en una cola.
- Además de usar desencadenantes de intervalo para iniciar una compilación, utilizo desencadenadores de proyecto para que cuando las dependencias se compilan correctamente, también se generen sus dependientes.
En cierto modo, esta configuración funciona. El principal problema es si alguien realiza cambios en el código tanto en el proyecto A como en el proyecto B, donde el proyecto B depende del proyecto A. A veces, el proyecto B se construirá antes del proyecto A. Debido a que el proyecto A aún no se ha construido, puede a veces causa que el proyecto B se rompa. Esto es temporal, ya que el desencadenante de intervalo hace que el proyecto A se construya más adelante, y su construcción exitosa hace que el proyecto B se reconstruya y se solucione. Lo que quiero evitar es que el proyecto B se construya antes del proyecto A para que la rotura intermedia no pueda suceder.
¿Qué prácticas utiliza para gestionar adecuadamente las interdependencias en un servidor CruiseControl.NET? En este punto, no estoy dispuesto a cambiar a un paquete de integración continua no libre como TeamCity.
Hacerlo de esta manera significaría que tendría que duplicar las instrucciones de compilación para cada proyecto de dependencia en cada proyecto dependiente. Pero supongo que si resulta que no puedo controlar el orden de compilación en CC.NET, tendré que ser redundante. Al menos puedo usar el soporte de CC.NET para XML Entities para encapsular los pasos de compilación de un proyecto. – Jacob
No necesariamente. Use un solo archivo cruise.build para almacenar el script NAnt. Comparta este único archivo cruise.build en todos los proyectos, de esa forma todos se adhieren a la jerarquía de dependencias y no está duplicando el script. –
Aunque apesta que la caja de construcción aún tenga que hacer una construcción duplicada, parece que no hay una buena forma de evitarla. Esta respuesta parece la mejor. – Jacob