tutorial - Integración continua y entrega continua con git-flow
git flow tutorial (3)
En mi opinión, si desea aplicar git-flow en la entrega continua, debe tener dos conductos diferentes como dijo en su primer enfoque.
Yo sugeriría este enfoque:
1. Desarrollar rama
- La rama de desarrollo activará la Compilación: Cuando se agregue una función a la rama de desarrollo (en la solicitud de combinación o extracción), el CI construirá, probará (Unidad de Pruebas y revisión de Código) y empaquetará la solución (con un "-desarrollo- vX "sufijo). Así que el equipo es capaz de reaccionar rápido en caso de fallo.
- Una vez que la Compilación ha finalizado con éxito, la tarea está terminada (de lo contrario, el cambio se revierte y el desarrollador que realizó el cambio debe corregirlo de inmediato). En paralelo, la etapa de prueba de aceptación comienza a implementar la compilación anterior en el entorno de desarrollo para ejecutar los trajes de prueba de aceptación (por ejemplo, pruebas funcionales y de regresión) sin bloquear el trabajo del desarrollador. Una vez finalizado, el estado de la rama de desarrollo se comunica al equipo. Por lo tanto, el equipo es consciente de la estabilidad de la solución durante el Sprint actual: si la Etapa de prueba de aceptación finaliza con éxito, el producto está listo para fusionarse con la rama Master (de lo contrario, se solucionará).
2. Rama maestra
- Una vez que finaliza el Sprint, la rama de desarrollador estable (es estable) se fusiona y se etiqueta con la rama principal. Por lo tanto, la rama principal activará la compilación de confirmación de troncales que construirá la solución, la probará y el paquete para la implementación (el paquete ahora se almacena con un candidato de versión o un sufijo maestro).
- Si Trunk Commit Build finaliza correctamente (debería funcionar), la etapa de prueba de aceptación implementará y validará las pruebas de aceptación en un entorno de integración. Y en caso de éxito, la nueva versión está lista para la producción. De lo contrario, en caso de error en la etapa de compilación o prueba de aceptación, la fusión se revierte.
Hemos estado haciendo integración continua y entrega continua desde hace tiempo con subversion se compromete como activadores de tuberías. Recientemente, comenzamos a usar git en algunos proyectos con git-flow y estamos tratando de decidir cuál de las ramas de git-flow deberíamos usar para activar la integración continua y las tuberías de entrega continua.
Aquí hay dos enfoques:
1. Utilizar rama desarrollada.
Problema: con git-flow se supone que implementamos la rama de lanzamiento (o maestro) en la producción, por lo que tendríamos que construir dos tuberías diferentes, una para la integración continua (desarrollo de la rama) y otra para la entrega continua (maestro de la rama). Esto podría introducir errores en la producción porque la versión en producción no será la misma que en otros entornos (integración, prueba, puesta en escena).
2. Utilizar rama maestra :
Problema: De esta manera, no tendríamos una integración verdaderamente continua, ya que los cambios en estas sucursales no se impulsan con mucha frecuencia.
¿Cuál es la rama correcta para usar en las tuberías?
Git-flow y la integración continua son, por definición, incompatibles. Las ramas son un mecanismo para retrasar la integración : cuando te comprometes con una rama que no sea la maestra (o troncal, si vienes de Subversion), evitas la integración continua. Hacer una integración continua es simple, pero no fácil.
La verdad se encuentra entre los dos. Si desea adoptar git-flow en una estricta canalización de CD, debe usar la rama de lanzamiento para su CI:
- Para cada (lote de) compromiso (s) de rama de desarrollo, permita que su servidor de CI cree automáticamente una rama de lanzamiento y ejecute todas sus pruebas en él.
- Si falla, déjelo informar y / o elimine la rama, de lo contrario, combínela con el maestro.
La idea básica proviene de la diapositiva de John Ferguson Smart sobre CI / CD en proyectos Java Maven (BDD en acción, Guía definitiva de Jenkins).