Una versione del prodotto, ad esempio v1.0.0.100
, rappresenta non solo una versione di produzione univoca del software, ma aiuta a identificare i set di funzionalità e le fasi di aggiornamento rapido per il suddetto 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 build CI (Continuous Integration) avrà uno script per creare il software che utilizza questo numero di versione verificata per applicarlo a tutte le aree del software necessarie (file binari, pacchetti di installazione, pagine di aiuto, 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 / ramo). Gli script di compilazione distribuiscono e usano il numero allo stesso modo, tuttavia hanno solo ottenere il valore in modo diverso (è fornito per lo script di compilazione, invece di far sapere allo script dove per ottenerlo relativamente all'albero dei sorgenti).
Il problema con il primo approccio è che può complicare le fusioni tra i rami principali. Se mantieni ancora 2 versioni parallele dello stesso software, risolvi i conflitti durante l'unione tra le due linee principali se la versione è stata modificata su entrambi dall'ultima unione.
Il problema con il secondo approccio è la riconciliazione. Quando torni ad una versione 1 anno fa, ti baserai esclusivamente sulle informazioni del tag per identificare il suo numero di versione.
In entrambi i casi, potrebbero esserci alcuni aspetti del numero di versione che non sono noti prima della build dell'elemento della configurazione. Ad esempio, una build CI può inserire un quarto componente in modo programmatico che è in realtà il numero di build automatico (ad esempio 140 ° 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 del software? Le parti "conosciute" devono essere sempre mantenute in VCS? E se sì, i conflitti tra le filiali principali sono un problema?
In questo momento manteniamo il nostro numero di versione tramite parametri specificati e mantenuti nel piano di build CI (Atlassian Bamboo). Dobbiamo fare attenzione prima di unire al nostro ramo master
che i numeri di versione sono impostati correttamente prima della creazione della build CI . Per quanto riguarda il flusso di lavoro 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 ramo release
in preparazione del rilascio. Il QA eseguirà il test di integrazione finale / fumo / regressione su questo ramo e al momento del signoff, si verificherà un'unione con master
che segnala l'impegno a rilasciare.