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
FeatureAfino al completamento - Una volta che
FeatureAè terminato, rilasciatelo aDev, quindiUAT - Una volta che l'azienda si è imposta su
FeatureAinUAT, è considerata prod-ready. UnisciFeatureAinmaster, quindi distribuisci il nuovo ramomasterinDevpoiUAT. Durante il percorso, "smoke test" il ramo inUATper 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
FeatureAinFeatureAandB - Unisci
FeatureBinFeatureAandB - Rilasciare
FeatureAandBsuDev, 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
masterinDev, poiUATper un rapido test del fumo e infineProd - Una volta in prod, ri-rilascia solo
FeatureBinDevpoiUATin 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.