Une version de produit, telle que v1.0.0.100
, représente non seulement une version de production unique du logiciel, mais aide à identifier les ensembles de fonctionnalités et les étapes du correctif pour ledit produit. En ce moment, je vois deux façons de maintenir la version finale du package / build / binaire d'un produit:
Contrôle de version. Un fichier quelque part stocke le numéro de version. Le serveur de construction d'intégration continue (CI) aura un script pour créer le logiciel qui utilise ce numéro de version enregistré pour l'appliquer à toutes les zones du logiciel nécessaires (binaires, packages d'installation, pages d'aide, documentation, etc.).
Paramètres d'environnement et / ou de construction. Celles-ci sont conservées en dehors du contrôle de version (c'est-à-dire qu'elles ne sont pas liées à l'instantané / balise / branche). Les scripts de build distribuent et utilisent le nombre de la même manière, mais ils obtiennent simplement la valeur différemment (il est fourni au script de build, au lieu d'avoir le script sait où l'obtenir par rapport à l'arborescence source).
Le problème avec la première approche est qu'elle peut compliquer les fusions entre les branches principales. Si vous conservez toujours 2 versions parallèles du même logiciel, vous résoudrez les conflits lors de la fusion entre les deux lignes principales si la version a changé sur les deux depuis la dernière fusion.
Le problème avec la deuxième approche est la réconciliation. Lorsque vous revenez à une version il y a 1 an, vous vous baserez uniquement sur les informations de balise pour identifier son numéro de version.
Dans les deux cas, certains aspects du numéro de version peuvent ne pas être connus avant la génération du CI. Par exemple, une construction CI peut mettre par programme dans un 4ème composant qui est vraiment le numéro de construction automatisé (par exemple 140ème génération sur la branche). Il peut également s'agir d'un numéro de révision dans VCS.
Quelle est la meilleure façon de suivre le numéro de version d'un logiciel? Les parties "connues" doivent-elles toujours être conservées dans VCS? Et si c'est le cas, les conflits entre les branches principales sont-ils un problème?
À l'heure actuelle, nous conservons notre numéro de version via des paramètres spécifiés et maintenus dans le plan de construction CI (Atlassian Bamboo). Avant de fusionner avec notre master
branche, nous devons faire attention à ce que les numéros de version soient correctement configurés avant le démarrage de la construction de CI . En ce qui concerne le flux de travail Gitflow, je pense que si le numéro de version était suivi dans le contrôle de source, nous pourrions garantir qu'il est correctement configuré lorsque nous créons notre release
branche en préparation de la sortie. QA effectuerait des tests finaux d'intégration / de fumée / de régression sur cette branche et, à la signature, une fusion aurait master
lieu qui signifierait l' engagement de libérer.
version.txt
lequel une version contient la seule ligne1.0.7
et l'autre est-il1.2.0
vraiment difficile à résoudre? Si c'est le seul conflit à fusionner deux branches qui se sont séparées, je me considérerais très chanceux. Combien de fois cela se produit-il? Si cela se produit, n'est-ce pas une bonne chose que vous soyez obligé de réfléchir au numéro de version que la version fusionnée devrait avoir? (Désolé pour l'utilisation ambiguë du mot «version».)