Dato che sto cercando sempre di più nella fornitura continua per la nostra organizzazione, faccio fatica a capire come possiamo integrare efficacemente i test di QA manuali prima che un rilascio venga trasferito in produzione.
Ho trovato diversi approcci, come branch-per-feature uno spiegato da Adam Dymitruk o git-flow e simili, che sembrano tutti includere un sacco di lavoro manuale per far sì che le cose configurino ogni sprint o eseguano operazioni di rollback.
Cercherò di spiegare il mio problema dando un esempio.
La maggior parte dei documenti CD delinea il flusso del percorso "felice" come segue:
develop -> CI build -> deploy to QA -> test on QA -> promote to Production
Questo è abbastanza facile da capire e funziona bene se non ci sono problemi. Ma supponiamo che il seguente flusso di lavoro richieda test manuali prima che una distribuzione alla produzione sia autorizzata: lo sviluppatore 1 lavora sulla funzione A, lo sviluppatore 2 lavora sulla funzione B. Io uso le funzionalità del nome, ma non lo dico necessariamente nella vasta gamma di una funzionalità che potrebbe essere contenuta utilizzando i pulsanti di selezione delle funzioni. Solo un po 'di lavoro.
lo sviluppatore 1 finisce il suo lavoro, unisce tutto in master - o il ramo di rilascio equivalente - innesca la build che viene distribuita in QA. Il controllo qualità inizia a testare. Durante i test di QA, lo sviluppatore 2 finisce il suo lavoro, si fonde in master, attiva la build. Il QA quindi rifiuta la caratteristica A. Pertanto, il rilascio dallo sviluppatore 1 non può continuare. A questo punto l'intero processo si ferma. Finché la funzione A non è pronta, la funzione B non può essere testata perché contiene anche il codice rifiutato dalla caratteristica A.
E questa è la parte che non capisco veramente come sistemare in modo semplice e automatico. Come possiamo ripristinare efficacemente la funzionalità A senza complessi interventi manuali? Come fanno le persone a fare questo? Sicuramente questo deve essere un problema che tutti affrontano, ma nessuno dei libri o degli schemi che ho letto finora sembra davvero affrontare questo problema.
Un passo in più. GitHub flow sembra suggerire di distribuire il ramo della caratteristica in produzione e il rollback se si verifica un problema di produzione. Potrebbe funzionare in uno scenario per singolo tester per sviluppatori, ma cosa succede se più funzioni sono firmate da più tester contemporaneamente?
lo sviluppatore 1 avvia la sua funzione, i rami del master, inizia a lavorare, spinge in master, i test del QA 1. Allo stesso tempo, lo sviluppatore 2 ha seguito lo stesso processo e QA 2 ha testato la sua funzionalità. Dato lo schema, la caratteristica A non contiene la caratteristica B e la caratteristica B non contiene la caratteristica A. Il QA 1 si disattiva, la caratteristica A entra in produzione. QA 2 firma, la funzionalità B entra in produzione. Ma la caratteristica A è persa. È in master, sì, dopo la distribuzione è stato unito, ma non tornerà in produzione fino a quando la caratteristica C non verrà schierata.
In che modo il flusso di GitHub funzionerebbe efficacemente in team più grandi? Qualcuno ha qualche esempio pratico su questo?