Estoy involucrado en mantener una cartera bastante grande de aplicaciones .NET. También en la cartera hay aplicaciones heredadas creadas sobre otras plataformas: C ++ nativo, formularios ECLIPS, etc.
Tengo un marco de compilación complejo además de NAnt en este momento que administra las compilaciones para todas estas aplicaciones. El marco de compilación utiliza NAnt para hacer varias cosas diferentes:
- Extraiga el código de Subversion, así como cree etiquetas en Subversion
- Cree el código, utilizando MSBuild para .NET u otros compiladores para otras plataformas
- Mire dentro de los archivos AssemblyInfo para incrementar los números de versión
- Elimina ciertos archivos que no deberían incluirse en las compilaciones / lanzamientos
- Lanza código a carpetas de implementación
- Comprime el código para realizar copias de seguridad
- Implementar servicios de Windows; comenzar y detenerlos
- Etc.
La mayoría de esas cosas se pueden hacer solo con NAnt, pero construimos un par de tareas de extensión para que NAnt haga algunas cosas que son específicas de nuestro entorno. Además, la mayoría de los procesos anteriores están genéricos y reutilizados en muchos de nuestros diferentes scripts de compilación de aplicaciones, por lo que no repetimos la lógica. Por lo tanto, no se trata de un simple código NAnt y no de simples scripts de compilación. Hay docenas de archivos NAnt que se unen para ejecutar una compilación.
Últimamente he estado insatisfecho con NAnt por un par de razones: (1) su sintaxis es simplemente horrible: los lenguajes de programación sobre XML son realmente horribles de mantener, (2) el proyecto parece haber muerto en la parra; No ha habido un montón de actualizaciones últimamente y parece que nadie está realmente al mando. Intentar que funcione con .NET 4 ha causado algunos puntos débiles debido a esta falta de actividad.
Entonces, con todo ese trasfondo fuera del camino, esta es mi pregunta. Dadas algunas de las cosas que quiero lograr en base a la lista anterior, y dado que principalmente estoy en una tienda .NET, pero también necesito construir proyectos que no sean .NET, ¿hay una alternativa a NAnt que debería considerar? ¿cambiar a?
Las cosas en mi radar incluyen Powershell (con o sin psake ), MSBuild por sí mismo y rake . Todos estos tienen pros y contras. Por ejemplo, ¿es MSBuild lo suficientemente potente? Recuerdo haberlo usado hace años y no parecía tener tanto poder como NAnt. ¿Realmente quiero que mi equipo aprenda Ruby solo para hacer construcciones usando rake? ¿Es psake un proyecto suficientemente maduro para fijar mi cartera? ¿Powershell está "demasiado cerca del metal" y terminaré teniendo que escribir mi propia biblioteca de compilación para usarla por sí misma?
¿Hay otras herramientas que debería considerar? Si estuviera involucrado en el mantenimiento de una cartera .NET de complejidad significativa, ¿qué herramienta de compilación estaría buscando? ¿Qué usa actualmente tu equipo?