2009-01-06 15 views
14

La lectura this publicación me ha dejado preguntándome; ¿Las compilaciones nocturnas son mejores para una situación que la integración continua? El consenso de las respuestas parece ser bastante desequilibrado a favor de la integración continua, ¿es ese evangelismo o no hay realmente ninguna razón para usar compilaciones nocturnas cuando la integración continua es una opción?Integración continua frente a compilaciones nocturnas

+0

Según las respuestas, la pregunta evolucionó un tanto en "compilaciones nocturnas además de integración continua". –

Respuesta

17

Si realmente está haciendo una integración continua con todas las pruebas disponibles, las compilaciones nocturnas serían redundantes, ya que lo último que se verificó en ese día ya habría sido probado.

Por otro lado, si su régimen de Interfaz Común sólo implica la ejecución de un subconjunto de todas las pruebas disponibles, por ejemplo, porque algunos de sus pruebas tardan mucho tiempo para correr, entonces se puede utilizar nightlies adicionalmente para funcionar todos pruebas. Esto te permitirá detectar muchos errores temprano, y si no puedes atraparlos temprano, al menos puedes atraparlos de la noche a la mañana.

No sé, sin embargo, si técnicamente aún es CI, ya que solo está haciendo una compilación "parcial" cada vez, ignorando algunas de las pruebas.

+1

La aplicación podría tener dependencias externas que podrían romperse y puede ser útil saber cuándo sucedió eso. También hay tareas que requieren mucho tiempo, como análisis de código o pruebas de rendimiento, que podrían ejecutarse utilizando el control de versiones bajo demanda, pero eso podría llevar un tiempo. Si el desarrollo es diario, el servidor de CI puede manejar la mayoría de estos, pero a veces el desarrollo se detiene por vacaciones, otros proyectos, negociaciones, etc. –

+0

Para desarrollos más grandes, la 'construcción nocturna' también puede tener un alcance más amplio. 'CI build'. Típicamente, el CI construye solo una línea de desarrollo ("rama"), a menudo en una PC local. Donde cada noche se construyen todas las variaciones. Por ejemplo, todas las ramas de características para muchas plataformas y/o productos y/o configuraciones. Por lo general, en un entorno de construcción más controlado. – Albert

5

Sí, si tiene un proceso que desea adjuntar a una compilación, pero es un recurso pesado. Por ejemplo, en mi equipo ejecutamos JTest durante la construcción nocturna. No podemos ejecutarlo durante el día porque:

  1. Se requiere una gran cantidad de recursos, lo que puede no estar disponible
  2. Toma 4 horas para completar cada vez
+0

En ese caso, ¿podrías construir continuamente y luego ejecutar JTest durante una construcción nocturna programada? – brian

+0

Eso es exactamente lo que hacemos. – Elie

3

En mi opinión profesional , la única razón para usar compilaciones nocturnas es cuando el proceso de compilación demora tanto que no se puede completar en un tiempo "razonable".

Por ejemplo, si su proceso de construcción tarda 5 horas para completar realmente no hay razón para hacer una acumulación en el registro.

Más allá de eso, hay mucho valor en saber tan pronto como sea posible cuando una acumulación falla que anula otras preocupaciones.

+1

"Razonable" no significa necesariamente muchas horas. Significa que no lo suficientemente rápido como para hacerlo confiablemente entre checkins. Si normalmente hay cinco o seis controles por día, cualquier cosa durante más de dos horas es claramente demasiado para CI. –

+0

@david: estoy de acuerdo. – NotMe

10

En nuestra organización, las compilaciones nocturnas y las compilaciones CI tienen dos propósitos distintos. La compilación de CI es una compilación de "último código" en la que las pruebas unitarias se ejecutan contra la última verificación como era de esperar. También ejecutamos varias métricas de código en la compilación CI.

Para construcciones nocturnas, sin embargo, solo incorporamos el código fuente que ha pasado por el proceso de revisión por pares y se considera listo para la prueba.

De esta forma, la compilación nocturna siempre contiene compilación que está "lista para pruebas", mientras que la compilación CI contiene características que, aunque funcionales (en la medida en que pasen las pruebas unitarias), pueden no estar listas para enviarlas al grupo de prueba.

Los grupos de prueba escriben nuevas CR exclusivamente a partir de una de las compilaciones nocturnas en contraposición a la compilación CI, aunque también están disponibles para pruebas informales de tipo exploratorio.

+0

Me gusta este proceso – Tim

+3

¿Cómo se diferencia entre el código de función preparada y el código que se desarrolla activamente? ¿Están estas dos ramas en el repositorio y el código cl se fusiona con la rama 'función preparada' cuando se convierte en 'función preparada'? – brian

+2

Me gusta esto también; pero creo que debes aclarar el lado VCS de cómo lograr esta separación de "función preparada". –

2

Depende del propósito y la duración de cada una de sus compilaciones. Básicamente, debe identificar lo que está intentando aprender de CI y decidir si vale la pena gastar los recursos en ejecutar compilaciones múltiples.

Utilizamos la integración continua en mi último trabajo para diferentes propósitos.

Primero, lo usamos para asegurarnos de que el repositorio y, por lo tanto, los desarrolladores siempre tuvieran una versión del código que se compiló. Pocas cosas son peores para los miembros del equipo que tener que gestionar los cambios rotos de otra persona a través de comentarios, comentarios, reversiones y fusiones, porque una persona ingresó el código incorrecto. Para esto, teníamos una compilación que se ejecutaba instantáneamente sin pruebas u otra validación, por lo que sabíamos lo antes posible si el código era seguro para actualizar. Las construcciones generalmente duraban unos diez minutos y la máquina probablemente corría alrededor del 50% en un día normal de trabajo. Aquí no se generó ninguna documentación, solo un pase silencioso o una sirena de alto volumen.

En segundo lugar, queríamos saber lo antes posible si las reglas se han roto o no. Cuanto más rápido encuentre una regla rota, más fácil será arreglarla. Para este propósito, teníamos una máquina separada que ejecutaba una compilación completa y validación del código. Esta máquina funcionaba de 12 a 14 horas al día continuamente en un día normal de trabajo. El estado del correo electrónico de la compilación se envió describiendo pruebas de unidad rotas, cumplimiento de código, etc.

Nos detuvimos allí en cuanto a compilaciones desencadenadas automáticamente. Una construcción nocturna encima de eso parecía un poco extrema para nosotros. Pero supongo que si quisieras tener una compilación de instantáneas archivada a diario, es posible que quieras programar una tercera compilación con los pasos adicionales necesarios para eso. Sin embargo, tuvimos otra compilación que envolvió y archivó nuestros artefactos de implementación de control de calidad para una implementación rápida y fácil, pero solo lo activamos manualmente.

3

Si tiene un buen proceso de CI robusto en su lugar, una "noche" sigue siendo útil.

  1. Como se mencionó, una compilación "nocturna" puede hacer pruebas exhaustivas y quizás algunas pruebas de sistema de alto nivel. Cosas de extremo a extremo.
  2. El concepto de construcción "nocturna" es fácil de entender para todos en la organización. Si tiene problemas para comunicar las construcciones de CI a otros grupos (por ejemplo, un grupo de control de calidad que no tiene el mismo manejo en Agile que el grupo Dev), un "nocturno" es un concepto poderoso y simple.
  3. Si su nightly es un conjunto de recursos por separado, puede administrarse por separado y utilizarse para cortar imágenes "doradas" con algunas afirmaciones sobre la integridad del software. Por ejemplo, el desarrollador escribe código, algún sistema de compilación confiable que dev no puede tocar lo construye, QA prueba la compilación de oro y la firma. En tal situación, la construcción nocturna funciona como un sistema de construcción de producción.

Solo algunas ideas.

2

Creo que las otras publicaciones cubren las razones comunes, como tener un proceso de compilación que toma "demasiado tiempo" o tener que ejecutar solo un subconjunto de pruebas durante la compilación de CI. Pero hay otra razón que es política.

En algunas organizaciones las compilaciones oficiales son manejadas por un equipo de construcción/infraestructura/gestión de versiones/SCM mínimamente receptivo. En estos casos, puede ponerlos a cargo de la construcción nocturna y luego ejecutar la construcción de CI fuera del desarrollo. Esto evita una pelea porque su construcción sigue siendo "la versión oficial" y su compilación de CI le brinda la retroalimentación que necesita.

2

Tenemos integración continua y construcciones nocturnas en su lugar. Ellos sirven dos propósitos diferentes.

Nuestro mecanismo de integración continua crea el software y ejecuta pruebas unitarias bajo el paquete de integración continua.

Nuestras etiquetas de construcción nocturnas controlan la fuente bajo control de versiones, construyen el software, ejecutan las pruebas de unidad bajo la suite de construcción nocturna. El software construido aquí se usa luego en varias pruebas de sistema y pruebas de estrés.

Creo que uno de los principales diferenciadores para la compilación nocturna son las pruebas del sistema.

Cuestiones relacionadas