2009-11-05 9 views
8

Por ejemplo:¿Cómo configurar CruiseControl.net para construir proyectos co-dependientes?

Quiero construir el proyecto A. Proyecto A depende de Proyecto B y C. Proyecto

Editar: Cada proyecto tiene su propio tronco en SVN: [repositorio]/ProjectA/tronco [repositorio]/ProjectB/tronco [repositorio]/ProjectC/tronco

Mi pregunta tiene un par de partes:

  1. ¿Cuál es el enfoque/configuración para que CCNET logre esta construcción "dependiente"?
  2. ¿Cómo debo configurar los proyectos para que se genere el Proyecto B o C, y luego desencadena una construcción del Proyecto A?
  3. Como cada proyecto gana dependencias, ¿cuál es el enfoque/configuración escalable para escalar el proceso de compilación?

Soy un novato en CCNET, así que si hay algunos conceptos subyacentes, no asuma que los conozco. Los detalles son mi amigo :-D

Editar: Estoy utilizando SVN como mi proveedor de control de fuente.

+1

¿Podría agregar más detalles sobre su estructura de subversión para estos proyectos? ¿Están todos los proyectos bajo un mismo tronco o hay diferentes repositorios? –

+0

Gracias Jason por preguntar, vea la primera edición en la pregunta. – Achilles

+0

http://confluence.public.thoughtworks.org/display/CCNET/Project+Trigger – Achilles

Respuesta

10

Se puede utilizar un Project Trigger para comenzar ProjectA cuando ProjectB está construido con éxito, así:

<project name="ProjectA"> 
    <triggers> 
     <projectTrigger project="ProjectB"> 
      <triggerStatus>Success</triggerStatus> 
      <innerTrigger type="intervalTrigger" 
          seconds="60" 
          buildCondition="ForceBuild" /> 
     </projectTrigger> 
    </triggers> 
    ... 
</project> 

Este urnas el resultado acumulación de ProjectB cada 60 segundos, y si hay una nueva generación correcta entonces ProjectA es desencadenado Por defecto, buscará el proyecto en el mismo servidor CCNET, pero puede apuntarlo a otro con el atributo serverUri. Puede agregar otro activador para ProjectA si también desea que se genere cuando se actualice su repositorio de Subversion.

Si está ejecutando las compilaciones en el mismo servidor, puede ponerlas en la misma cola si pudieran interferir entre sí de alguna manera, de lo contrario podría tener ambas compilando al mismo tiempo.

+0

Eso parece ser exactamente lo que necesitaba. Me conectaré y veré qué tan bien funciona esto. – Achilles

3

He creado un sistema de compilación de alrededor de 20 soluciones y quizás 100 proyectos usando scripts NAnt con CCNet como motor de compilación. Para manejar las dependencias entre las soluciones, utilicé la herramienta basada en Java Ivy.

Ivy utiliza dependencias binarias donde la dependencia califica con información de versión. El resultado de una compilación se almacena en un repositorio binario, es decir, el sistema de archivos o incluso en subversión. Al compilar las dependencias binarias se descargan al sistema de archivos.

Este enfoque funciona bien para proyectos en los que tiene módulos acoplados relativamente sueltos (representados por una solución MS) que evolucionan con relativa independencia entre sí. Para una configuración como la suya en la que tiene una troncal separada para cada proyecto/solución, los proyectos/soluciones realmente necesitan estar ligeramente acoplados o de lo contrario se encontrará haciendo un montón de etiquetados y ramificaciones a medida que el sistema se agranda.

Si necesita un acoplamiento más ajustado entre sus proyectos, le recomiendo que los mueva al mismo maletero.

Nota: Ivy tiene que ser llamado como un ejecutable de línea de comandos y no se obtiene la agradable integración de Java Ant.

+0

Mover los proyectos al mismo tronco sería ideal, pero quiero la flexibilidad para tenerlos organizados libremente en el repositorio. Durante el proceso de compilación, supongo que la construcción de la estructura de directorios de la solución en el directorio de trabajo permitiría compilar los proyectos juntos. – Achilles

Cuestiones relacionadas