Siamo una piccola azienda con più team che gestiscono i propri repository git. Questa è una piattaforma web e gli artefatti di ogni squadra sono distribuiti alla fine della giornata per i test notturni. Stiamo cercando di formalizzare il processo di versioning e packaging.
Ogni squadra ha un ramo principale in cui svolgono lo sviluppo quotidiano. I membri dell'assicurazione della qualità di ogni squadra vogliono che gli artefatti delle modifiche apportate dal loro team vengano distribuiti in un banco di prova in cui tutti i componenti sono combinati dallo chef. Gli artefatti sono tarball ma vorrei convertirli in RPM in modo da poter pensare e ragionare correttamente sulle versioni.
Il processo di rilascio comporta l'interruzione di un ramo di rilascio dal ramo di sviluppo (master nella maggior parte dei casi) di ciascuno dei repository git. Questo viene poi dato all'assicurazione della qualità che esegue test e firma su una serie di artefatti.
Ad esempio questo è un tipico repository git con i suoi rami di rilascio associati:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
Sono bloccato nel tentativo di capire uno schema per eseguire il versioning dei pacchetti provenienti dai rami di sviluppo. Non vogliamo etichettare eccessivamente il ramo principale di ciascun repository e limitare i tag solo al rilascio dei rami. Ma dovremmo essere in grado di interrogare i pacchetti distribuiti nelle macchine di test usando la semantica yum / rpm standard. Come sarebbero le versioni di sviluppo se il ramo master non ha tag? Capisco che git describe
mi può fornire una rappresentazione utile di una versione di build ma che funziona bene quando vengono taggati vari punti di rilascio sul ramo.
EDIT1: in risposta alla risposta di @ Urban48
Ho pensato che avrei dovuto spiegare un po 'di più il nostro processo di rilascio. Ai fini di questa discussione, supponiamo di avere una filiale master
in tutti i repository. Ilmaster
ramo è considerato il ramo di sviluppo e viene distribuito in un ambiente di controllo qualità abilitato per CI-CD automatizzato. È qui che viene eseguito un sottoinsieme di test notturni per garantire la stabilità del master. Esaminiamo questa pipeline di lavori prima di tagliare un ramo di rilascio. I nostri rami di rilascio hanno vita breve. Ad esempio, dopo aver tagliato un ramo di rilascio (da un master stabile), viene eseguita una regressione completa, le correzioni vengono eseguite e distribuite alla produzione. Questa operazione richiede circa una settimana. Rilasciamo quasi ogni due settimane alla produzione.
I nostri rami delle funzioni sono sempre tagliati dal master e sottoposti a una serie di test degli sviluppatori prima di fondersi con il master su cui sono sottoposti ai controlli di stabilità del CD CI.
Gli hotfix vengono eseguiti sui rami degli hotfix (tagliati dai rami di rilascio) e distribuiti con test di impatto minimo in produzione.
La nostra strategia di versioning per i rami release e hotfix segue semver. Rilasciare rami durante il ciclo di QA Passare attraverso versioni come v2.0.0-rc1
, v2.0.0-rc2
e finalmente dopo QA sign-off diventano v2.0.0
.
A volte facciamo rilasci punteggiati per piccole funzionalità che vengono unite per rilasciare rami (e quindi padroneggiare) dove diventano le versioni v2.1.0
. E gli hotfix assumono il v2.1.1
modello.
La domanda tuttavia non riguarda il controllo delle versioni di questi rami. Preferirei non modificare del tutto questo schema di versioning. L'unico cambiamento avviene per il ramo di sviluppo cioè. maestro. Come posso indicare in modo affidabile nell'ambiente CI-CD quale versione esiste rispetto alla versione precedente in produzione. Questo sarebbe idealmente fatto attraverso il tagging smart git ma si preferisce qualcosa che non tagga eccessivamente il ramo master.
rc
suffisso? Ciò detterebbe la major.minor
versione di sviluppo. rc
e il numero di build può essere ottenuto solo in base a quello. Anche rc
su master non ha senso perché non rilasciamo mai da master. Etichettiamo i nostri candidati al rilascio oggi sulle filiali di rilascio come parte del ciclo di rilascio
rc
suffisso.