Una versión del producto, como v1.0.0.100
, representa no solo una versión de producción única de software, sino que ayuda a identificar conjuntos de características y etapas de revisión para dicho producto. En este momento veo dos formas de mantener la versión final de paquete / compilación / binario de un producto:
Control de versiones. Un archivo en alguna parte almacena el número de versión. El servidor de compilación de Integración continua (CI) tendrá un script para compilar el software que utiliza este número de versión registrado para aplicarlo a todas las áreas del software necesario (binarios, paquetes de instalación, páginas de ayuda, documentación, etc.).
Entorno y / o parámetros de construcción. Estos se mantienen fuera del control de versión (es decir, no están vinculados a la instantánea / etiqueta / rama). Los scripts de compilación distribuyen y usan el número de la misma manera, sin embargo, solo obtienen el valor de manera diferente (se proporciona al script de compilación, en lugar de hacer que el script sepa dónde obtenerlo en relación con el árbol de origen).
El problema con el primer enfoque es que puede complicar las fusiones entre las ramas principales. Si aún mantiene 2 versiones paralelas del mismo software, resolverá conflictos al fusionar entre las dos líneas principales si la versión ha cambiado en ambas desde la última fusión.
El problema con el segundo enfoque es la reconciliación. Cuando regrese a un lanzamiento hace 1 año, dependerá únicamente de la información de la etiqueta para identificar su número de lanzamiento.
En ambos casos, puede haber ciertos aspectos del número de versión que no se conocen antes de la compilación de CI. Por ejemplo, una compilación de CI puede poner programáticamente un cuarto componente que es realmente el número de compilación automatizado (por ejemplo, la compilación 140 en la rama). También podría ser un número de revisión en VCS.
¿Cuál es la mejor manera de mantenerse al día con el número de versión de un software? ¿Deben las partes "conocidas" mantenerse siempre en VCS? Y si es así, ¿son un problema los conflictos entre las ramas principales?
En este momento mantenemos nuestro número de versión a través de parámetros especificados y mantenidos en el plan de compilación de CI (Atlassian Bamboo). Debemos tener cuidado antes de fusionarnos con nuestra master
sucursal para que los números de versión estén configurados correctamente antes de que comience la compilación de CI . Con respecto al flujo de trabajo de Gitflow, creo que si se rastrea el número de versión en el control de origen, podríamos garantizar que esté configurado correctamente cuando creamos nuestra release
rama en preparación del lanzamiento. El control de calidad llevaría a cabo la prueba final de integración / humo / regresión en esta rama y, al finalizar la sesión, se realizará una fusión master
que indica el compromiso de liberación.
version.txt
donde una versión contiene una sola línea1.0.7
y la otra es1.2.0
realmente tan difícil de resolver? Si este es el único conflicto al fusionar dos ramas que se separaron, me consideraría muy afortunado. ¿Con qué frecuencia se presenta? Si ocurre, ¿no es bueno que te veas obligado a pensar qué número de versión debería tener la versión fusionada? (Perdón por el uso ambiguo de la palabra "versión".)