Integra temprano, integra seguido. Construye una base de código compartida con confianza.
La Integración Continua es ampliamente malinterpretada. No es solo un servidor de compilación. No es solo ejecutar pruebas en cada commit. Esas son herramientas que apoyan CI—pero CI en sí es una práctica.
CI real significa:
La parte "continua" es clave. Si estás integrando semanalmente, eso no es continuo. Si tienes ramas de funcionalidad de larga duración, eso no es continuo. CI significa integrar tu trabajo con el trabajo de todos los demás cada día, usualmente varias veces al día.
CI es una práctica social
CI se trata de cómo el equipo trabaja en conjunto, no solo de herramientas. Un servidor Jenkins que ejecuta pruebas en ramas de un mes de antigüedad no es CI.
La verdadera CI requiere desarrollo basado en trunk: todos hacen commit a la rama principal (a menudo llamada "trunk" o "main").
Esto suena aterrador. ¿No romperá la gente cosas? Ahí es donde entra la disciplina:
Las ramas de larga duración son el enemigo de CI. Cuando desarrollas en una rama durante semanas, no estás integrando. Solo estás posponiendo la integración—y mientras más esperes, más difícil se vuelve.
Crea ramas por horas, no por días. Integra diariamente, no semanalmente.
Un desarrollador crea una rama, trabaja durante 2-3 horas, ejecuta todas las pruebas localmente, luego fusiona a main. Esto sucede 3-4 veces al día por desarrollador. La integración es aburrida porque los conflictos son raros y pequeños.
Los desarrolladores crean ramas de funcionalidad que viven durante 2-3 semanas. Fusionan a main cuando la funcionalidad está 'terminada'. Los conflictos de fusión son dolorosos. Los bugs de integración son comunes. El 'servidor CI' solo prueba la rama main obsoleta.
Para que CI funcione, el ciclo de compilación y pruebas debe ser rápido. Martin Fowler sugiere la regla de los 10 minutos: toda la compilación, incluyendo todas las pruebas, debe completarse en menos de 10 minutos.
¿Por qué 10 minutos? Porque:
Si tu compilación toma demasiado tiempo:
Algunos equipos ejecutan un subconjunto rápido localmente (pruebas unitarias) y la suite completa en el servidor CI. Eso está bien siempre que la suite completa se ejecute lo suficientemente rápido para proporcionar retroalimentación oportuna.
La compilación fallará. Lo que importa es qué sucede después.
La regla: Cuando la compilación falla, arreglarla se convierte en la máxima prioridad. Todo lo demás se detiene.
Esto puede parecer extremo, pero considera: una compilación rota significa que el equipo no puede confiar en la rama principal. El trabajo de todos está bloqueado porque no pueden integrar de manera segura. Cada minuto que la compilación está rota es un minuto de riesgo acumulado.
¿Quién la arregla? Usualmente la persona que la rompió. Pero si está atascada, otros ayudan. Una compilación rota es un problema del equipo, no un problema individual.
Cómo prevenir fallas:
Algunos equipos usan una rotación de "sheriff de CI"—alguien responsable de vigilar la compilación y coordinar arreglos. Esto previene el efecto espectador donde todos asumen que alguien más lo arreglará.
Las compilaciones rotas son emergencias
Una compilación rota que permanece rota durante horas es una falla del equipo. Trátala con la misma urgencia que un incidente de producción.
CI es la base para prácticas más avanzadas:
Entrega Continua (CD): Cada commit puede desplegarse a producción. El despliegue es una decisión de negocio, no técnica.
Despliegue Continuo: Cada commit que pasa las pruebas se despliega automáticamente a producción. No se requiere aprobación humana.
No todos los equipos necesitan despliegue continuo. Pero todos los equipos se benefician de CI. Comienza ahí.
Métricas de CI a vigilar:
CI no se trata solo de atrapar bugs. Se trata de crear un ritmo donde la integración es aburrida, rutinaria y segura. Cuando la integración es segura, todo lo demás se vuelve más fácil.