it-swarm-es.com

¿Qué importancia tienen las compilaciones diarias?

Uno de los criterios de la Prueba de Joel son las compilaciones diarias. La idea es que si la construcción está rota, quienquiera que la haya roto esté cerca para arreglarla. Si la compilación no se puede arreglar, todos tendrán que verificar una versión anterior y trabajar en eso. Puedo entender cómo esto puede ser bastante malo en el control de versiones centralizado, donde es importante evitar las fusiones y ramificaciones tanto como sea posible, pero esto solo suena como una molestia menor para el control de versiones distribuidas. ¿Estás de acuerdo con esto? ¿Existen otras razones por las que las compilaciones diarias son importantes?

21
Casebash

Creo que lo que es importante tener en cuenta aquí es que regular genera ayuda detecta errores más temprano que tarde. No tiene para ser diario, pero con suficiente frecuencia. Idealmente, también puede ejecutar sus pruebas unitarias.

El objetivo es averiguar cuándo se rompe una compilación antes de la fase de prueba final, para encontrarlos lo antes posible.

Simplemente configúrelo para construir su (s) rama (s) de desarrollo principal.

Lo usamos en el trabajo (aunque lo construimos cada hora) y, a menudo, cuando nos olvidamos de configurarlo, encontramos problemas unas horas antes de lanzarlo.

19
mbillard

Necesito agregar un poco a esto (y @GoodEnoughs):

pero esto solo suena como una molestia menor para el control de versiones distribuidas.

Enfáticamente no, lo que hace una compilación de "servidor" es decirle que su tronco se compilará y pasará sus pruebas más o menos desde limpio (menor es la cantidad de configuración que necesita hacer de su entorno).

Estoy contemplando un cambio a DVCS, pero incluso habiéndolo hecho, sacarás mi integración continua de mis frías manos muertas.

Para tomar un ejemplo simple: está desarrollando la característica "a", él está desarrollando la característica "b" distribuida o no, en algún momento necesita unirla toda, si, cuando se compromete, se olvida de agregar un archivo que la aplicación construirá. en su máquina, pero no en ningún otro lugar. Entonces, cuando empuje la compilación a su "tronco", la Integración Continua se activará y la compilación fallará y lo sabrá y, con suerte, antes cualquiera extraiga su código no tan completo que podrá tomar pasos.

Si está trabajando en un proyecto con varios desarrolladores, debe poder definir de dónde provienen las versiones de lanzamiento (el tronco en efecto), esto es cierto independientemente de cómo funcione su control de versiones.

Si ha agregado una característica, especialmente una de la que otras personas tienen una dependencia, poder estar seguro de que cuando se empuja a "vivir", se compila y pasa las pruebas en otro lugar que no sea su entorno de desarrollo es enorme. Más que eso, implemento a partir de compilaciones de mi servidor de compilación, es como se especifica la compilación "definitiva". En última instancia, tendré compilaciones de implementación activadas por el usuario. No es bueno decir que puede solucionarlo, no puede hacerlo si lo necesita (y yo tengo codificado cajas de desarrollo redondas en una oficina para encontrar y confirmar los archivos faltantes).

¿Es todo eso un poco fuerte? No lo sé, pero mi servidor de compilación es una de esas cosas que, habiendo conseguido, no deseo devolver.

5
Murph

Creo que las construcciones diarias son muy importantes. Si tiene un equipo distribuido en diferentes zonas horarias, lo mejor es encontrar un tiempo que sea aproximadamente el "final del día" para la mayoría del equipo. Además, si las compilaciones diarias tienen un componente de prueba automatizado, entonces es más deseable.

En los días de los sistemas de control de fuente central, yo recomendaría compilaciones continuas que se ejecutan cada 5-10 minutos cuando se cambia algo en el código fuente. Dado que un error de compilación tiene el potencial de ralentizar a la mayoría del equipo. Para las organizaciones que ejecutan sistemas de control de código fuente distribuidos, es posible que una compilación continua no sea tan necesaria, ya que los desarrolladores tocan la base de código 'prístina' directamente con menos frecuencia.

4
khivi

Las compilaciones diarias están bien. Definitivamente los necesita si no tiene nada más, pero para ser honesto, creo que la prueba de Joel está un poco desactualizada en estos días.

En mi opinión, debería estar construyendo continuamente a lo largo del día, ejecutando su unidad, sistema y casos de prueba de nivel funcional e idealmente empaquetar e implementar en un entorno similar a una etapa al mismo tiempo mientras verifica que cualquier DB y los mecanismos de control de versiones del entorno que tenga implementados están funcionando como se esperaba.

Si los tiempos de compilación o implementación son excesivos, considere la posibilidad de eliminar algunos de estos problemas con discos RAM físicos o de software, conexiones a Internet más rápidas, compilaciones en paralelo, etc. El tiempo que ahorrará al identificar rápidamente las rupturas de compilación va a amoratizar el costo del hardware con bastante rapidez .

2
Keith Brings

Las compilaciones diarias no son importantes. Compilaciones diarias que siempre son exitosas son (o aquellas en las que solo se rompe durante una hora). Tener CI cuando la compilación está rota el 70% del tiempo no es muy útil, porque si la cosa está rota en su mayoría, no le ayuda a identificar un error.

2
anon

Creo que debería ser una compilación, prueba e implementación diaria en el servidor de ensayo.

La idea detrás de la 'compilación diaria' es tener siempre algo listo que los probadores y gerentes de proyecto puedan ejecutar para que todos tengan una idea de cuál es el estado real del proyecto.

En el pasado, con aplicaciones de escritorio después de la 'compilación diaria', un evaluador o gerente de proyecto podía ejecutar la aplicación de inmediato, por lo que no era necesario mencionar ningún paso de implementación.

1
Sarel Botha

Idealmente, a menos que esté construyendo algo masivo que demore más de medio día en construirse, construiría más de una vez al día. Una vez que haya configurado un servidor de integración continua, como Hudson o TeamCity , las compilaciones ocurrirán automáticamente, generalmente cada hora o en cada confirmación, y será notificado si hay algún problema.

Es una buena manera de detectar errores temprano, especialmente si también está ejecutando pruebas automatizadas como parte de la compilación. Es particularmente útil para encontrar errores de configuración donde la compilación funciona en la máquina de un desarrollador, pero no funciona en otro lugar porque se omitió algo del repositorio o del entorno.

Los servidores de integración continua más avanzados también le permiten realizar un seguimiento de las métricas a lo largo del tiempo (por ejemplo, porcentaje de cobertura de código, tiempo de compilación, líneas de código, etc.)

1
Dan Dyer