Abbiamo tre ambienti: Dev
, UAT
e Prod
. Utilizziamo TFS
per pianificare le versioni del nostro ramo master
in Dev
per la nostra verifica interna, quindi UAT
per la verifica aziendale e, infine, finalmente per Prod
dopo l'approvazione.
Recentemente abbiamo adottato una nuova strategia di ramificazione Git leggera come segue:
master
è sempre prod-ready. In qualsiasi momento, master
dovrebbe poter essere distribuito alla produzione.
Lo sviluppo di nuovo viene eseguito in un ramo di una funzione separata (argomento) come segue:
- Crea un nuovo ramo di funzione off
master
, chiamaloFeatureA
- Sviluppa
FeatureA
fino al completamento - Una volta che
FeatureA
è terminato, rilasciatelo aDev
, quindiUAT
- Una volta che l'azienda si è imposta su
FeatureA
inUAT
, è considerata prod-ready. UnisciFeatureA
inmaster
, quindi distribuisci il nuovo ramomaster
inDev
poiUAT
. Durante il percorso, "smoke test" il ramo inUAT
per garantire che la fusione risultante in master non abbia causato effetti collaterali imprevedibili. Una volta testato il controllo del fumo, rilasciareProd
.
Il problema che stiamo riscontrando in questo momento è che potremmo avere più funzionalità sviluppate in parallelo, che potrebbero potenzialmente essere distribuite nell'ambiente di test per la verifica allo stesso tempo. L'approccio che abbiamo preso per risolvere questo problema è:
Se FeatureA
e FeatureB
devono essere in UAT allo stesso tempo, allora:
- Crea un nuovo ramo,
FeatureAandB
, che comprenderà entrambe le funzioni - Unisci
FeatureA
inFeatureAandB
- Unisci
FeatureB
inFeatureAandB
- Rilasciare
FeatureAandB
suDev
, quindiUAT
Il lato negativo di questo è che è improbabile che sia FeatureA
che FeatureB
siano UAT
verificati allo stesso tempo. Se FeatureA
è verificato e FeatureB
no, dobbiamo rilasciare FeatureA
a prod senza FeatureB
. Quello di cui abbiamo discusso in questo scenario è:
- Unisci
FeatureA
(non il ramo comune, ma solo CaratteristicaA) inmaster
- Rilasciare
master
inDev
, poiUAT
per un rapido test del fumo e infineProd
- Una volta in prod, ri-rilascia solo
FeatureB
inDev
poiUAT
in modo che il test possa continuare.
Il lato negativo di questo è che influisce direttamente su qualsiasi test per FeatureB
e potenzialmente svolge qualsiasi lavoro eseguito dai tester con FeatureB
.
Come gestisci più funzioni che vivono contemporaneamente in ogni ambiente e che vengono rilasciate potenzialmente indipendenti l'una dall'altra? Siamo in grado di mitigare il problema un po 'di più se disponiamo di più ambienti o di test UAT di ritorno molto più veloce, ma alla fine della giornata lo stesso problema può esistere.
Non sono contrario ad ascoltare strategie di ramificazione alternative.