Plataforma de compilación automatizada para cartera .NET: ¿la mejor opción? [cerrado]

10

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?

RationalGeek
fuente

Respuestas:

2

Si ya está usando TeamCity, debería poder usar sus funciones existentes para la mayoría de lo que necesita. Admite de forma nativa la creación de archivos .sln de Visual Studio y, si necesita realizar tareas adicionales en todos sus proyectos, puede modificar los archivos .targets de .NET Framework en sus máquinas de compilación, para que no tenga que alterar archivos csproj individuales.

Se retirará automáticamente de Subversion, los artefactos zip, le permitirán controlar qué archivos se consideran artefactos desplegables. La nueva versión (6.0) también permite múltiples pasos de compilación, por lo que existe la posibilidad de implementar xcopy de artefactos en un recurso compartido.

También puede escribir sus propias aplicaciones / tareas que pueden ejecutarse como parte de una compilación (a través del corredor de línea de comandos) y hacer lo que quiera (como iniciar / detener procesos de Windows).

Adam Lear
fuente
3

Enfocamos las cosas como tres actividades diferentes, Construir, Implementar e Instalar. Usamos TFS para el servidor de compilación con algunas llamadas a Powershell. Luego usamos Powershell para lograr todas las piezas de Implementación e Instalación que son bastante complejas y en múltiples servidores locales y en la nube. He estado muy feliz con el aprendizaje de Powershell a través de MSBuild o alguna otra herramienta. También he tenido una buena experiencia con Visual Build en el pasado.

Matt McQ
fuente
2

Echa un vistazo a Hudson y MSBuild como pareja. El poder viene con las fuertes capacidades de MSBuild y los complementos de Hudson .

Por ejemplo, podría usar hudson y ejecutar sus scripts NAnt hasta que migre a MSBuild y luego también puede ejecutar sus scripts MSBuild.

Abordar específicamente sus puntos:

  • Subversion y Etiquetado
  • MSBuild
  • Echar un vistazo a AssemblyInfo se le preguntó sobre SO, pero la solución podría no ser de su agrado
  • MSBuild puede eliminar archivos con facilidad
  • "Liberar código a las carpetas de implementación": puede hacer que el sistema de compilación omita ese paso y lo implemente automáticamente mediante una serie de métodos. O puede FTP si lo desea.
  • MSBuild puede comprimir
  • Servicios de Windows, nuevamente MSBuild es tu amigo aquí.
Steven Evers
fuente
Gracias por la información sobre MSBuild. Parece que hay más poder allí que la última vez que intenté usarlo. Con respecto a Hudson, ¿esto proporciona un beneficio más allá de lo que proporcionan otros servidores de CI, como TeamCity, que utilizamos actualmente? Estoy tratando de evitar alterar demasiado el status quo aquí, y reemplazar nuestro servidor CI al mismo tiempo que reemplazamos nuestros scripts de compilación parece más doloroso.
RationalGeek
En mi humilde opinión, creo que TeamCity es fantástico ... y Hudson es mejor. Se puede ver que realizan las mismas funciones, hasta que quieras hacer algo increíble, entonces Hudson gana. Honestamente, Hudson puede analizar (stylecop / fxcop) -> construir-> prueba-> etiqueta-> copia de seguridad local y externa-> implementar mientras lo mantiene actualizado a través de RSS, SMS, XFD.
Steven Evers
Hmm ... nada en esa lista es imposible con TeamCity, pero quizás sea más fácil con Hudson. De cualquier manera, a menos que alcancemos algunos puntos débiles con TC, no creo que cambiemos pronto.
RationalGeek
@jkohlhepp: La dificultad es que hay muchas soluciones en el mismo espacio. Al final del día, Hudson es fácil y es 100% gratis. IIRC, una cosa que TC podría tener en Hudson es la construcción de múltiples agentes.
Steven Evers
2

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):

  • Es fácil de implementar (última versión: 2010)
  • Está completamente integrado con Visual Studio y Team Foundation Server
  • Se está convirtiendo en un estándar como MS Build
  • Es gratis con Bizspark (para startups)

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
No había considerado esta opción, pero no creo que sea una opción realista para nosotros ya que no estamos usando TFS en absoluto, y hemos vetado los intentos de pasar a ella en el pasado (por presupuesto y otras razones). Pero gracias por la sugerencia que es una idea interesante.
RationalGeek
No es tan expansivo. Si su administración es sensible al precio, MS Build será la combinación perfecta. Solía ​​trabajar solo con MS Build + CruiseControl.NET y funcionó muy bien. Agregaré eso en mi respuesta.
@Pierre 303: Por curiosidad, ¿por qué quieres deshacerte de Automated Build Studio?
RationalGeek
@Pierre 303: El gasto de TFS no es la única preocupación. Mi tienda es parte de una empresa más grande, y se han estandarizado en Subversion y otras herramientas y ser "no estándar" e ir con TFS causa problemas políticos.
RationalGeek
@jkohlhepp: no es fácil de usar, no está bien integrado con Visual Studio (al menos la versión que tengo) y está lejos de ser un estándar.
2

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.

softveda
fuente
1

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.

Wyatt Barnett
fuente
Parece que la mayoría de estas respuestas están equiparando CI con scripts de compilación. Siempre había considerado que los scripts de compilación eran la inteligencia, y que el servidor CI era lo que simplemente iniciaba las compilaciones basadas en desencadenantes. Pero tal vez tengas razón y necesito repensar esto.
RationalGeek
1

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.

Srikanth Remani
fuente
1
FYI TeamCity es gratis si tiene menos de 20 configuraciones de compilación y menos de 20 usuarios. Además, si usted es un proyecto de código abierto, puede solicitar una licencia ilimitada gratuita.
RationalGeek
0

¿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.

Mchl
fuente
Hudson es más una plataforma de integración continua, y no una plataforma de construcción. Tenemos un servidor CI en su lugar: TeamCity, que funciona bien con NAnt. Sin embargo, las razones por las que quiero reemplazar NAnt son porque mantener los scripts de NAnt es doloroso. El uso de los scripts actuales a través de Hudson no resuelve este problema. Gracias por la sugerencia, sin embargo.
RationalGeek
En mi humilde opinión, Hudson es muy limitado en lo que hace correctamente con proyectos VS. Los pagos no están vinculados a los conjuntos de cambios de la manera que espera y detrás de escena no está haciendo nada más que ejecutar un archivo por lotes que crea a través de una interfaz web y muchos complementos. Sin embargo, informar es agradable si puedes hacer que funcione bien.
Bill