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?
fuente
Yo uso Automated Build Studio . Quiero deshacerme de eso.
La única razón por la que no cambio a 100% MS Build o Team Foundation Build es el costo que implicará reconstruir los scripts que funcionan perfectamente hoy. Los guiones no cambian mucho ...
Sin embargo, para el próximo producto, este será Team Foundation Build sin ninguna duda por las siguientes razones principales (son muchas más):
Como también estás en .NET, te recomiendo encarecidamente que uses TFB.
Si no puede solicitar Bizspark o no puede permitirse comprar la licencia, puede optar por CruiseControl.NET + MS Build y algunos scripts de soporte. En una gran empresa de servicios públicos para la que trabajé, habíamos utilizado CruiseControl.NET para construir, probar, implementar e informar todos nuestros proyectos. Incluyó la implementación automática del servicio web.
fuente
FinalBuilder puede hacer todos los elementos solicitados, con una buena interfaz gráfica de usuario y una aplicación de servidor de compilación incluida de forma gratuita.
fuente
Actualmente estoy haciendo lo que está haciendo (es decir, desde la compilación hasta el empaquetado y la implementación) usando MSBuild (> 3000 líneas de scripts). El CI está utilizando CruiseControl.Net y espero poder pasar a TeamBuild en el futuro. MSBuild es engorroso (programación en XML) pero es bastante potente, especialmente el procesamiento por lotes y el seguimiento de dependencias. Se mantiene y mejora activamente en las nuevas versiones .Net y es la base del sistema de compilación en Visual Studio y TFS. También los archivos de proyectos de Visual Studio son en realidad proyectos de MSBuild y puedo conectarlos a varios puntos de extensión. El paquete de extensión MSBuildtiene muchas tareas adicionales y es trivialmente fácil crear sus propias tareas mediante programación. Sugiero darle a MSBuild un pensamiento serio. Últimamente también estoy aprendiendo PowerShell y lo encuentro fácil para ciertas tareas, especialmente en la fase de implementación, como instalar y configurar certificados, IIS, etc.
Edite el proyecto de MSBuild en VisualStudio, ya que comprende la sintaxis y le proporciona inteligencia. Aquí hay algunas otras buenas utilidades que ayudarán con MSBuild.
Plataforma de lanzamiento de MSBuild : para extensiones de shell
MSBuild SideKicks : edite, ejecute y depure gráficamente scripts.
fuente
Tal vez está pidiendo demasiado de su script de compilación y no suficiente de su servidor de compilación: con team city, podría tener fácilmente scripts simples que cumplan con cada una de sus viñetas, en cualquier idioma o pila que tenga sentido y use las tareas de compilación de TeamCity para encadenar las cosas según corresponda.
fuente
Recomiendo encarecidamente TeamCity, es fácil de configurar y configurar. MSBuild es preferible a NAnt por la sencilla razón de que todos los archivos de proyecto / solución en vs2008 / 2010 son técnicamente archivos de MSBuild, pero puede configurar TeamCity con MSBuild o NAnt.
Por supuesto, TeamCity te costará. Personalmente, tuve la opción de preferir el rastrillo, simplemente porque la fricción con las herramientas de Ruby en comparación con otras, aunque psake también es un buen candidato.
fuente
¿Consideraste a Hudson ? Puede ser una molestia, ya que requiere que se ejecute el servidor de aplicaciones Java, pero creo que podría permitirle usar su script NAnt actual y construir sobre eso usando otras herramientas.
fuente