2009-10-21 15 views
5

¿Qué hacen normalmente cuando revisan el código del software de control de versiones para realizar su integración continua o compilación nocturna? ¿1) extraes el último código o 2) seleccionas alguna etiqueta (es decir, FUNCIONAL) que representa el código más reciente del desarrollador para probar?Check Out for Continuous Integration

Supongo que la respuesta a esto depende de cómo la gente normalmente usa sus repositorios de gestión de configuración. ¿Pretendes solo almacenar código que está "completo"? Si ese es el caso, si un desarrollador está trabajando en una tarea durante una semana más o menos, él/ella no podrá verificar nada hasta que la tarea esté completa. Sin embargo, si el servidor de integración continua simplemente tira de una etiqueta bien conocida en lugar de extraer el código más reciente, esto permitirá a los desarrolladores verificar el código con mucha frecuencia, ya que están trabajando para almacenar un historial de su trabajo en progreso. Luego, una vez que se sintieran cómodos con los cambios, podrían etiquetar su nuevo código con la etiqueta FUNCTIONAL.

Solo queríamos conocer las mejores prácticas.

Gracias

+0

Estás suponiendo que un desarrollador no puede trabajar en una tarea sin causar roturas, pero eso no es necesariamente cierto, sobre todo si se encuentran con una serie de pruebas de unidad antes de cada confirmación, y evitar hacer un compromiso cuando las pruebas fallan. – bdsl

Respuesta

2

Así que lo que normalmente hacemos es tener una rama de "construir" el que el servidor CI construye fuera. Fusionamos todo lo que queremos que se incluya en la compilación nocturna en la rama de compilación y se desarrollará allí.

En realidad, no desarrollamos en contra de la rama de compilación, pero tenemos ramas de desarrollo que se utilizan para mantener los cambios que no están listos para ser lanzados a los entornos de prueba.

+0

¿Qué herramienta usas? ¿Hace que la ramificación continua y la fusión sean bastante simples? – dewald

+0

Usamos TeamCity. El servidor de CI no realiza ninguna de las bifurcaciones y fusiones, eso depende de los desarrolladores. Lo que hace el servidor de CI es detectar una confirmación a una rama de SVN específica y eso desencadena una compilación. Una compilación consiste en compilar la aplicación, ejecutar las pruebas unitarias y desplegar la aplicación en el servidor. – lomaxx

1

Las principales recomendaciones que había puesto a dar un CI (más como reglas de oro):

  1. ya lo tienen que tirar código de la CABEZA/MAESTRO. Haga su HEAD/MASTER siempre lo más nuevo posible y como estable como sea posible.
  2. Nadie puede cometer código dañado en HEAD/MASTER. Si eso ocurre, significa que alguien rompió la compilación.
  3. Quien rompa la construcción tiene que ser comprometido a repararlo tan pronto como posible.
  4. Haga que su CI ejecute las compilaciones en por compromiso. Entonces, tan pronto como alguien comete un código dañado en HEAD, el CI lo obtendrá y romperá la compilación. La mayoría de los servidores de CI que he visto admiten este modus operandi.
  5. También puede hacer que su CI genere compilaciones nocturnas y etiquetar el código cuando generan los paquetes . Esta es también una buena práctica de , y puede ver que va en en muchos CI de proyectos de código abierto de todo el mundo.

Parte de mi experiencia: Nuestra CI obtiene extraer el código de HEAD/MASTER. Utilizamos git aquí, por lo que siempre es muy fácil para nuestros desarrolladores trabajar en las sucursales y mantenerlas sincronizadas, pero solo consiguen establecer un código estable para HEAD/MASTER.

+0

Estoy de acuerdo con la mayoría de los puntos anteriores, un pensamiento de precaución. Me ha resultado difícil obtener un CI sin problemas si se ejecuta por compromiso. en un equipo de múltiples desarrolladores que trabajan simultáneamente en varios módulos de un gran proyecto. La frecuencia de las confirmaciones tiende a abrumar al servidor de CI especialmente si tiene muchas pruebas. En este caso, intenta lotes para que la compilación se ejecute después de un cierto número de confirmaciones o según un cronograma. – Nikhil

0

La respuesta correcta se basa en la forma de organizar el código.

Si se supone que la línea principal siempre es estable/funciona, entonces simplemente compila a partir de eso.

Si usted tiene una rama que es la rama de "oro", entonces ...

En nuestra tienda, tenemos tres tipos de ramas:

  • Mainline // siempre edificable, siempre " listo para liberar una vez que se hace control de calidad"
  • ramas Liberadas // oro, puesto en libertad y liberar-poder en cualquier momento
  • ramas de Desarrollo // desordenado donde la cirugía se realiza

(Por supuesto, hacer esto bien lleva un buen vcs. Usamos forzosamente, que tiene ramificación impresionante.)

Hacemos nuestro edificio continuo desde la línea principal y ramas de liberación.

HTH