Una versione del prodotto, ad esempio v1.0.0.100
, rappresenta non solo una versione di produzione unica del software, ma aiuta a identificare i set di funzionalità e le fasi di aggiornamento rapido per tale prodotto. In questo momento vedo due modi per mantenere il pacchetto finale / build / versione binaria di un prodotto:
Controllo versione. Un file da qualche parte memorizza il numero di versione. Il server di compilazione a integrazione continua (CI) avrà uno script per compilare il software che utilizza questo numero di versione del check-in per applicarlo a tutte le aree del software necessario (file binari, pacchetti di installazione, pagine della guida, documentazione, ecc.).
Ambiente e / o parametri di costruzione. Questi sono mantenuti al di fuori del controllo della versione (cioè non sono legati allo snapshot / tag / branch). Gli script di build distribuiscono e usano il numero allo stesso modo, comunque ottenere il valore in modo diverso (è fornito allo script di build, invece di avere il know script in cui per farlo relativamente alla struttura di origine).
Il problema con il primo approccio è che può complicare le fusioni tra i rami principali. Se si mantengono ancora 2 versioni parallele dello stesso software, si risolveranno i conflitti quando si uniscono tra le due linee principali se la versione è cambiata su entrambe dall'ultima unione.
Il problema con il secondo approccio è la riconciliazione. Quando torni a una versione 1 anno fa, ti affidi esclusivamente alle informazioni sui tag per identificarne il numero.
In entrambi i casi, potrebbero esserci alcuni aspetti del numero di versione che non sono noti prima della build CI. Ad esempio, una build CI può inserire programmaticamente un quarto componente che è in realtà il numero di build automatizzato (ad es. 140a build sul ramo). Potrebbe anche essere un numero di revisione in VCS.
Qual è il modo migliore per tenere il passo con il numero di versione di un software? Le parti "note" devono sempre essere mantenute in VCS? E se è così, i conflitti tra i rami principali sono un problema?
Al momento manteniamo il nostro numero di versione tramite parametri specificati e mantenuti nel piano di costruzione CI (Atlassian Bamboo). Dobbiamo stare attenti prima di unirci alla nostra master
filiale che i numeri di versione siano impostati correttamente prima dell'inizio della build CI . Per quanto riguarda il flusso di lavoro di Gitflow, ritengo che se il numero di versione fosse tracciato nel controllo del codice sorgente, potremmo garantire che sia configurato correttamente quando creiamo il nostro release
ramo in preparazione del rilascio. Il QA eseguirà i test finali di integrazione / fumo / regressione su questo ramo e al momento della firma, si verifica una fusione master
che segnala l'impegno a rilasciare.
version.txt
cui una versione contiene la riga singola1.0.7
e l'altra è1.2.0
davvero così difficile da risolvere? Se questo è l'unico conflitto nella fusione di due rami che si sono separati, mi ritengo molto fortunato. Quanto spesso si verifica? Se si verifica, non è una buona cosa che sei costretto a pensare a quale numero di versione dovrebbe avere la versione unita? (Ci scusiamo per l'uso ambiguo della parola "versione".)