Automatización de construcciones a partir de tags de subversión

Estoy tratando de automatizar el process de compilation para el grupo de ingeniería. Como parte de esa automation, estoy tratando de llegar al punto en que el acto de aplicar una label específica que se adhiera a un patrón dará inicio a un process automatizado que hará lo siguiente:

  • Verifica el código fuente
  • Crear un script de construcción a partir de una plantilla
  • Construye el proyecto

Estoy bastante seguro de que podría hacer esto con un anzuelo en subversión, pero estoy tratando de encontrar una manera de hacer esto con algo más que un gancho de subversión.

  • ¿Tendría sentido monitorear el directory de tags en el repository de subversión para iniciar mi flujo de trabajo?
  • ¿Hay alguna herramienta decente que ayude con esto (.NET sería genial si es posible).
  • ¿Será mejor que solo escriba un motor para hacer esto?

Mis preferences:

  • Producto existente que hace todo o parte de esto
  • Si es necesario realizar un trabajo de desarrollo, es preferible .NET
  • Funciona con Windows (tenemos un repository basado en Linux, pero todas las construcciones se producen en Windows)

Me gusta Hudson : FÁCIL de instalar y funciona con SVN.

Puedes configurarlo para build en cada commit.

Lo descargué y comencé a buildlo dentro de un día. Ha pasado por muchos ajustes, pero se lo recomendaría a cualquiera.

También he usado el control de crucero pero no estoy tan feliz con eso. No tengo ningún motivo específico aparte del problema multiplataforma.

EDITAR

Recientemente agregué un trabajo en mi server de compilation hudson que escucha un chat jabber de google / gmail. Puedo "promover" una compilation "regular" a una compilation de lanzamiento con este mecanismo. Acabo de configurar un nuevo trabajo que hace los pasos necesarios para promover / publicar una compilation privada en un candidato de lanzamiento.

Lo hice usando Hudson. En la ranura de pago de subversión regular, tengo una caja para el maletero:

http://dryad.googlecode.com/svn/trunk/dryad

Luego, como la primera acción de compilation, tengo un "shell de ejecución" y en ese shell uso un modificador svn para cambiar a la última label en el repository:

svn cambiar http://dryad.googlecode.com/svn/tags/ 'svn ls http://dryad.googlecode.com/svn/tags | queue -n 1 'dríada

El siguiente paso de compilation es un command maven 'clean install' que inicia la compilation utilizando el código de la versión labelda.

Aún no me he dado count cómo hacer que Hudson comience con una versión labelda más reciente en lugar de tener que hacer el cambio, pero el interruptor funciona. Luego puede tener el activador cuando se actualiza el directory de tags.

Es automatizado … un poco complicado, pero funciona …

el interruptor debe include un backtick para el segundo command svn, pero tuvo que usar 'porque el backtick no apareció aquí.

Parece que buscas un motor de compilation de continuous integration, algo así como CruiseControl o Hudson (hudson está escrito en Java pero es MUY fácil de usar en Windows).

Ahora podría manipular sus scripts de compilation para estas herramientas para ver el directory de tags, pero eso sería un poco contraproducente ya que están destinadas a ver una location específica y build el proyecto en esa location. Si mira todo el directory de tags, podría terminar fácilmente con todas las tags que se verían en la máquina de compilation y necesitaría un script de nivel superior para decidir qué label build.

Para lo que quiere, un motor de compilation puede ver una location específica (digamos '/ branches / release'). Si luego se fusiona con esa sucursal, Hudson buildá automáticamente el proyecto, archivará los artefactos y creará una label para usted si todo fue exitoso (consulte el Complemento de labeldo de Subversion).

No me gusta hacer este tipo de cosas desde un enganche post-commit porque hace que la fase de commit tome demasiado time. Sin embargo, TeamCity es un sistema de control de fuente que tiene una function que hace exactamente eso sin retenerte mientras se compromete.

Recomiendo a Hudson por esto.

CruiseControl.Net puede automatizar fácilmente comstackciones automáticas de depósitos de subversión.

Puede monitorear el repository (Svn y varios otros types) e iniciar comstackciones automáticas usando una variedad de herramientas. (NAnt, MSBuild, etc.)

¡Un producto comercial ha sido anunciado en este sitio para exactamente este propósito!

http://www.finalbuilder.com/Default.aspx?tabid=314

Es posible que deba agregar un anzuelo a SVN para activar el inicio de compilation a less que desee que se ejecute un cronogtwig.

También recomendaría Hudson para esto. Estaba buscando hacer algo similar, crear una label y tener un inicio de compilation. En cambio, opté por usar este complemento para Hudson:

http://wiki.hudson-ci.org/display/HUDSON/Release+Plugin

Y utilícelo para impulsar la creación de la label y una versión de lanzamiento explícita.

Estoy usando NAnt (y NAntContrib ) para comstackciones automatizadas. Comtesting automáticamente los repositorys de subversión para ver si hay cambios y (si hay alguno) obtiene la última versión del código fuente e inicia la compilation.

No estoy seguro de si las tareas existentes le permiten hacer exactamente lo que desea, pero tal vez podría usarlo como inicio y, si es necesario, extenderlo con tareas para sus necesidades especiales (está desarrollado con .NET).

Al igual que los otros chicos, dijo, quiere un server de continuous integration (CruiseControl, CruiseControl.Net, Hudson, etc.). Si bien podría trabajar en su script de compilation y enganchar los enganches para hacer la funcionalidad que describió, al final encontrará que reinventó el volante (Continuous Integration Server). No es necesario, hay soluciones disponibles gratuitamente solo para este propósito.

El process funcionará un poco diferente de lo que describió anteriormente. El server de compilation:

  1. Detectar un nuevo compromiso
  2. Verifica tu código fuente
  3. Ejecute su script de compilation
  4. Etiqueta en la construcción exitosa

El compromiso desencadena el process y crea la label en lugar de la label que activa el process. El server hace esto supervisando el repository svn en lugar de un enlace de confirmación.

Consulte la documentation de CruiseControl.Net sobre este tema, específicamente las opciones tagOnSuccess y tagBaseUrl. Hudson y CruiseControl deberían tener opciones similares.

http://confluence.public.thoughtworks.org/display/CCNET/Subversion+Source+Control+Block