El desarrollo basado en tronco es una de las diversas estrategias de ramificación que utilizan con frecuencia los equipos que practican la integración continua y la entrega/implementación continuos (CI/CD).
Con el desarrollo basado en tronco, los cambios se envían directamente a la rama maestra (también conocida como tronco), en lugar de desarrollar funcionalidades o correcciones de errores en ramas separadas y fusionarlas con la maestra en una etapa posterior.
La confirmación de los cambios en la rama maestra pone en marcha el proceso de CI/CD. Si el proceso detecta algún fallo, es responsabilidad de todos intervenir para intentar solucionarlo lo antes posible. El objetivo es mantener la rama maestra en un estado listo para la implantación, con cambios que se lanzan con frecuencia.
Si ya está familiarizado con los principios de CI/CD, probablemente reconozca por la descripción anterior que el desarrollo basado en tronco es una buena opción para la integración y la implementación continuas. Mientras todos los miembros de su equipo confirmen sus cambios con regularidad, obtendrá las ventajas de la visibilidad de los cambios de todos y de un feedback habitual y rápido sobre lo que se está compilando.
La prioridad de mantener la rama maestra saludable y en un estado listo para el lanzamiento anima a todos a añadir pruebas para sus cambios a medida que avanzan. La supervisión de las métricas de cobertura de pruebas le ayudará a mantener el control sobre ello, mientras que asegurarse de que todo el mundo compila localmente (tal vez también ejecutando un conjunto básico de pruebas automatizadas) antes de comprometerse reducirá el número de problemas encontrados en la rama maestra.
Algunos defensores del desarrollo basado en tronco argumentan que es la única manera de lograr la integración continua, y que el uso de ramas de desarrollo o de funcionalidades solo socava los beneficios de CI/CD. Sin embargo, el desarrollo basado en tronco también tiene sus inconvenientes.
Mientras que es estupendo para la implementación continua, donde los cambios de código que pasan correctamente por todas las etapas del proceso se lanzan automáticamente, el modelo funciona mejor para los productos SaaS, con gran tolerancia a (e incluso expectativa de) actualizaciones continuas.
Si está creando un producto instalado o una aplicación móvil, es posible que desee agrupar los cambios en versiones periódicas en lugar de crear una nueva versión para cada actualización que supere el proceso.
En ese caso, el uso de ramas facilita la gestión de lo que se incluye en cada lanzamiento y proporciona soporte continuo para múltiples versiones del producto.
Un reto potencial del desarrollo basado en tronco es cómo manejar el desarrollo de características grandes o complejas. Confirmar los cambios a la rama maestra regularmente mientras se implementa directamente a producción requiere contar con un modo de gestión de las funciones que aún no se desea hacer visibles a los usuarios.
Para el desarrollo basado en tronco, las feature flags son una forma de controlar la visibilidad de las funcionalidades, pero su gestión puede ser compleja. Una alternativa es optar por una estrategia de ramificación que incluya ramas de funcionalidades, de modo que pueda mantener las funciones por separado hasta que esté listo para lanzarlas.
Para los equipos que son nuevos en CI/CD, confirmar los cambios directamente en la rama maestra mientras se mantiene lista para implementar puede ser un reto si todavía no ha tenido tiempo para desarrollar un conjunto de pruebas robusto. Si el desarrollo basado en tronco es una buena opción, vale la pena que se convierta en un objetivo en el que pueda trabajar a medida que su práctica de CI/CD madure.
El desarrollo basado en tronco es una buena opción para la integración y la implementación continuas, que funciona mejor si se dispone de un sólido conjunto de pruebas automatizadas y no se necesita dar soporte a varias versiones del software o agrupar las actualizaciones en lanzamientos. Sin embargo, por supuesto no es la única manera, y otras estrategias de ramificación pueden adaptarse mejor a sus circunstancias.