Existen diversas posibilidades a la hora de armar la estructura de un repositorio de código. La elección de una u otra depende de diversos factores como ser: el tamaño del equipo, la forma de trabajo, la frecuencia de despliegue de la aplicación etc.
Quiero compartir dos estructuras posibles con las que he trabajado.
Estructura minimalista para Continuous Delivery
Contexto:
- Tu aplicación es «standalone», en el sentido que tiene mínimas dependencias con aplicaciones externas
- Tu equipo de desarrollo es chico (menos de 4 programadores)
- Cuando debes agregar cambios/nuevas funcionalidades lo haces en pequeños incrementos
- Cuentas con un alto porcentaje de cobertura
- La regresión manual (en que caso que la necesites) te lleva menos de 30 minutos
Si se dan los puntos anteriores, entonces puedes ir fácilmente a un contexto de Continuous Delivery para lo cual recomiendo una estructura de repositorio basada en dos branches permanentes:
- Develop: es el branch sobre el que se hace el desarrollo
- Master: es el branch que contiene lo que se encuentra en producción
Cuando se está desarrollando una nueva funcionalidad, se va commiteando a develop. Cuando dicha funcionalidad está completa y ha sido vista por el responsable de producto en el ambiente de tests, entonces, dicha funcionalidad es mergeada en master y desplegada al ambiente productivo.
En caso de detectarse un error en producción, se crea un branch temporal (hot-fix) para desarrollar el fix que una vez completo es mergeado en master y develop.
Estoy asumiendo un ecosistema de trabajo que cuenta con un ambiente desarrollo (máquina del developer), una ambiente de tests (similar al de producción) y un ambiente de producción.
Estructura tradicional para desarrollo iterativo
Contexto:
- Trabajas en un esquema iterativo con salidas a producción programadas en cada X días/semanas
- Tu aplicación depende de otras aplicaciones/servicios externos
- Tu equipo de desarrollo no es tan chico (más de 4 desarrolladores)
- No tienes una buena cobertura, lo cual te lleva a ejecutar regresiones que llevan horas
En este caso también tendremos los 3 branches mencionados anteriormente (develop, master y hot-fixes temporales) pero adicionalmente tendremos otros branches:
- Feature branch: cada funcionalidad es desarrollada en un branch aparte que luego es mergeado a develop
- Release branch: es este branch se van a acumulando las funcionalidades listas para pasaje a producción. Puntualmente se hace un merge de develop a release branch
Este esquema es conocido como GitFlow y tiene cierta popularidad en el mundo Git, pero a pesar de ello es posible utilizarlo con otro controladores de versiones.
Deja un comentario