Somos una empresa pequeña con múltiples equipos que administran sus propios repositorios git. Esta es una plataforma web y los artefactos de cada equipo se implementan al final del día para las pruebas nocturnas. Estamos tratando de formalizar el proceso de versiones y empaques.
Cada equipo tiene una rama maestra donde realizan el desarrollo diario. Los miembros de control de calidad de cada equipo desean que los artefactos de los cambios de su equipo se implementen en un banco de pruebas donde el chef combine todos los componentes. Los artefactos son tarballs, pero me gustaría convertirlos en RPM para que podamos pensar y razonar sobre las versiones correctamente.
El proceso de lanzamiento implica cortar una rama de lanzamiento de la rama de desarrollo (maestra en la mayoría de los casos) de cada uno de los repositorios git. Esto se da luego a la garantía de calidad que realiza pruebas y firma en un conjunto de artefactos.
Por ejemplo, este es un repositorio git típico con sus ramas de lanzamiento asociadas:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
Estoy atrapado tratando de encontrar un esquema para realizar versiones de paquetes provenientes de ramas de desarrollo. No queremos etiquetar excesivamente la rama maestra de cada repositorio y restringir las etiquetas para liberar solo ramas. Pero deberíamos poder consultar los paquetes desplegados en las máquinas de prueba utilizando la semántica estándar de yum / rpm. ¿Cómo se verían las versiones de desarrollo cuando la rama maestra no tiene etiquetas? Entiendo que git describe
puede proporcionarme una representación útil de una versión de compilación, pero que funciona bien cuando se etiquetan varios puntos de lanzamiento en la rama.
EDIT1: en respuesta a la respuesta de @ Urban48
Pensé que debería explicar nuestro proceso de lanzamiento un poco más. Para los propósitos de esta discusión, supongamos que tenemos una sucursal master
en todos los repositorios. La master
rama se considera la rama de desarrollo y se implementa en un entorno de control de calidad habilitado para CI-CD automatizado. Aquí es donde se ejecuta un subconjunto de pruebas nocturnas para garantizar la estabilidad del maestro. Examinamos esta cartera de trabajos antes de cortar una rama de lanzamiento. Nuestras ramas de lanzamiento son de corta duración. Digamos, después de cortar una rama de lanzamiento (desde un maestro estable), se ejecuta una regresión completa, se realizan arreglos y se implementan en producción. Esto toma alrededor de una semana para hacerlo. Lanzamos casi cada dos semanas a la producción.
Nuestras ramas de características siempre se cortan del maestro y se someten a una cierta cantidad de pruebas de desarrollador antes de fusionarse con el maestro en el que se someten a las comprobaciones de estabilidad de CI-CD.
Las revisiones se realizan en ramas de revisión (cortadas de las ramas de lanzamiento) y se implementan con pruebas de impacto mínimas en la producción.
Nuestra estrategia de versiones para las ramas de lanzamiento y revisión sigue a semver. Las ramas de lanzamiento durante el ciclo de control de calidad pasan por versiones similares v2.0.0-rc1
, v2.0.0-rc2
y finalmente después de que se cierra la sesión de control de calidad v2.0.0
.
A veces hacemos lanzamientos punteados para pequeñas características que se combinan para liberar ramas (y luego para masterizar) donde se convierten las versiones v2.1.0
. Y las revisiones asumen el v2.1.1
patrón.
Sin embargo, la pregunta no se trata de versionar estas ramas. Preferiría no cambiar este esquema de versiones por completo. El único cambio se produce para la rama de desarrollo, es decir. Maestro. ¿Cómo puedo indicar de manera confiable en el entorno de CI-CD qué versión existe con la versión anterior en producción? Idealmente, esto se haría mediante el etiquetado inteligente de git, pero se prefiere algo que no etiquete excesivamente la rama maestra.
rc
sufijo? Eso dictaría la major.minor
versión de desarrollo. rc
y el número de compilación se puede obtener solo en base a eso. También rc
en master no tiene sentido porque nunca nos liberamos de master. Etiquetamos a nuestros candidatos de lanzamiento hoy en las ramas de lanzamiento como parte del ciclo de lanzamiento
rc
sufijo.