La società in cui lavoro ha un (a mio avviso) processo di costruzione lento. Utilizziamo TFS e il controllo del codice richiede diverse ore. Funziona così:
(Supponendo che la modifica sia stata apportata e che la revisione del codice sia stata approvata)
Innanzitutto, apporti le modifiche e invialo per un passaggio di approvazione tramite un pulsante in Visual Studio. Questo costruisce l'intera soluzione dello studio visivo e gestisce un sottoinsieme di test che consideriamo fondamentali per il progetto. Queste build vengono eseguite in parallelo per l'efficienza. Se questo succede, il passo successivo viene automaticamente avviato. Se fallisce, ricevi un'email di compilazione che dice quali test hanno fallito e per quale motivo, a quel punto devi ricominciare.
[Questo primo passo richiede diverse ore per completare]
In secondo luogo, lo stesso set di test viene eseguito come prima con la tua modifica, tranne che invece di queste build eseguite in parallelo, sono serializzate. Se la compilazione ha esito positivo, le modifiche vengono verificate nella "linea principale". (Usavamo i rami, ma non lo facciamo più). Se questo non riesce, ricevi un'email di compilazione che dice quali test hanno avuto esito negativo e per quale motivo, e devi ricominciare da capo.
[Questo secondo passo richiede molte più ore per completare]
Terzo, (ricorda che il codice è già stato archiviato a questo punto), viene eseguita una build più completa che esegue tutti i test invece di un solo sottoinsieme. Poiché questa build impiega così tanto tempo, i changeset vengono caricati in batch e, come in passato, se la compilazione fallisce, ricevi un'email che dice quali test hanno fallito. Sfortunatamente, può essere difficile capire se il tuo cambiamento è stato il colpevole.
[Questo terzo passaggio richiede molte più ore per completare]
Abbiamo il concetto di un "test intermittente". Se un test fallisce, lo eseguiamo fino a due volte per vedere se passa. Sappiamo che questo è male, ma non abbiamo fatto lo sforzo di eliminare questo tipo di test.
Inoltre, questo processo è stato recentemente interrotto da problemi con test che hanno bloccato troppe risorse sulle macchine di compilazione, o persone che ignorano il processo e controllano direttamente il codice, che interrompe il primo passo.
Per riferimento, la dimensione del progetto è nell'ordine di un milione di righe di codice. Non mi aspetto che i build impieghino alcuni minuti, ma dopo aver letto delle persone che fanno un'integrazione continua e come dovrebbero impiegare al massimo 10 minuti, dovresti essere in grado di eseguire immediatamente tutti i tuoi test, ecc. Sto diventando molto scoraggiato lo stato del nostro processo.
Come potremmo migliorare il nostro processo di costruzione in modo che ci sia un tempo di risposta più breve tra la preparazione di una modifica e l'accesso alla linea principale?