Continuous Integration e Continuous Delivery: benefici e raccomandazioni

In DevOps e nell’utilizzo di metodologie Agile in generale, spesso si sente parlare degli acronimi CI e CD, ma di cosa si tratta? In questo articolo approfondiamo i concetti di Continuous Integration, Continuous Delivery e Continuous Deployment.
Continuous Integration: cos’è?
La Continuous Integration (CI) è una pratica che si applica in contesti in cui lo sviluppo del software avviene attraverso un sistema di controllo versione, che prevede che le modifiche vengano unite al branch principale il più spesso possibile: ogni membro del team deve effettuare l’integrazione più volte al giorno - secondo la tecnica del pomodoro ogni 25 minuti - ogni giorno. E più aumentano le dimensioni del progetto, più integrazioni giornaliere sono richieste a ciascun membro del team.
Le modifiche vengono testate automaticamente con un sistema di build and running che svolge test in autonomia per individuare errori il prima possibile. Questo sistema di controllo evita l’incombere delle problematiche al momento finale di rilascio poiché ogni implementazione è testata singolarmente e nel momento stesso in cui viene rilasciata.
Integrazione controllata, automazione e test sono gli elementi principali della Continuous Integration.
Continuous Integration: benefici
- Diminuzione di bug e problemi: iniziando ad utilizzare questa pratica si riscontra una riduzione significativa di bug e problemi. Grazie all’incremento dei test svolti e la possibilità di individuarli nelle prime fasi del progetto, si evitano problemi “a cascata” nelle fasi successive di sviluppo.
- Automazione: l’utilizzo di test automatici permette di ridurre sensibilmente il lavoro manuale, quindi l'errore generato dalle attività di routine e dalla distrazione.
- Maggior controllo: sebbene l’automazione aumenti, è comunque ancora possibile mantenere un alto livello di controllo da parte di chi lavora al progetto. I test continui e regolari permettono di avere un punto di vista generale su ogni fase di progetto.
- Trasparenza: grazie alla Continuous Integration tutto il team riesce ad avere una visione chiara di come il progetto sta procedendo e di quali saranno le fasi successive. Questo aiuta anche a capire molto più facilmente come intervenire in caso di test falliti.
- Più tempo per lavorare al progetto: automatizzando diversi processi delle fasi di test, il tempo che ogni professionista dedica alla realizzazione del progetto vero e proprio aumenta considerevolmente.
Continuous Integration: svantaggi
Più che dei veri e propri svantaggi a livello di pratica, si tratta della necessità di un’importante fase di preparazione iniziale che richiede all’organizzazione di investire budget e tempo per poter iniziare l’implementazione della procedura.
L’implementazione di Continuous Integration richiede infatti:
- una piattaforma per il Controllo della versione (github, gitlab, bitbucket…): questa dà la possibilità di implementare le pipelines che si preoccupano di automatizzare le build e i test.
- la preparazione di un ambiente di test: nei casi ottimali esistono tre ambienti che sono sviluppo, test (o staging) e produzione.
- una ottima formazione del team.
Continuous Delivery: cos’è?
Il Continuous Delivery (CD) è un approccio metodologico che permette di rilasciare software in modo frequente e veloce tramite un processo di rilascio interamente automatizzato: ogni singola modifica software (modifiche nella configurazione, nuove features, risoluzione di errori…) è immediatamente e automaticamente costruita, testata e consegnata all’user in maniera sicura, veloce e sostenibile.
Continuous Delivery: benefici
- Controllo dei rischi: l’obiettivo del Continuous Delivery è quello di facilitare e velocizzare la fase di deployment abbassando quanto più possibile i rischi ad essa legati.
- Velocità: è possibile aumentare il ritmo delle release e creare un loop consegna-feedback con i clienti.
- Migliore qualità del lavoro: avendo a disposizione più tempo per dedicarsi ad altri elementi di sviluppo dell’applicazione (sicurezza, usability, performance…) la qualità del prodotto sarà sicuramente migliore.
- Meno pressione sulle piccole decisioni che incoraggia un processo iterativo più veloce ed immediato.
- Miglior metodo di lavoro: grazie alle automazioni, il team può lavorare in maniera più rilassata. Inoltre, date le release frequenti e la vicinanza agli user, il team è anche in grado di capire meglio quello che funziona e cosa può essere migliorato per soddisfare le aspettative.
Continuous Delivery: svantaggi
- Il team deve essere altamente formato sui principi della CI.
- È necessario avere un ambiente di test solido e rodato: test difettosi possono creare danni durante i test di qualità!
- L’automazione prevede che solo il lancio sia manuale, mentre tutte le altre fasi non necessitano di nessun intervento. Affinché questo funzioni correttamente è necessario avere eseguito le giuste implementazioni di sistema che comportano tempo e budget.
Continuous Deployment: cos’è?
Sia Continuous Delivery che Continuous Deployment spesso vengono indicati semplicemente con la sigla CD: sebbene possano sembrare due metodologie di sviluppo software molto simili, hanno una grande differenza.
Il Continuous Deployment, infatti, è sostanzialmente una pratica tecnica che fa “un passo in più” rispetto alle automazioni della Continuous Integration: attraverso queste procedure si implementa la metodologia che prende il nome di Continuous Delivery.
Continuous Deployment: benefici
Ovviamente molti dei vantaggi e degli svantaggi identificati in Continuous Integration e Continuous Delivery, nel Continuous Deployment vengono amplificati e richiedono più impegno.
- Velocità: l’automazione è al suo massimo potenziale, non è più necessario né innescare un trigger per dare il via alla fase di integrazione, né interrompere lo sviluppo per realizzare un rilascio.
- Rischi, problemi e bug ridotti al minimo: tutto è circoscritto a piccoli cambiamenti e anche risolvere problemi e bug che si presentano è molto più facile.
- Feedback continuo: i clienti vedono costantemente l’evolversi del prodotto e non solo dopo un rilascio. Questo permette di avere feedback costanti e sistemare subito il prodotto per farlo aderire alle aspettative.
Continuous Deployment: svantaggi
Per poter lavorare secondo il Continuous Deployment sono necessari due fattori fondamentali:
- Team estremamente formato e competente;
- Server di lavoro ottimizzato, utile al software che viene rilasciato nel caso necessiti di molte performance.
A questi due elementi di base, si aggiungono anche alcuni possibili roadblock:
- La documentazione deve essere costantemente aggiornata ed essere sempre corrispondente agli stage di sviluppo.
- Il rilascio di cambiamenti significativi necessita del supporto di altri dipartimenti oltre a quello di sviluppo: marketing, customer service, eccetera.
Continuous Deployment: l’automazione
Questo grado di automazione è molto difficile da gestire e non è possibile farlo con leggerezza: un team crossfunzionale, dotato delle skill fondamentali, è perfettamente in grado di gestire l’intero progetto. Ciò che conta non è avere un esercito di super specialisti ma un team DevOps formato.
Tuttavia, se gestita, questa stessa automazione porta moltissimi vantaggi nella struttura del lavoro: i professionisti hanno più tempo per dedicarsi allo sviluppo, i problemi vengono identificati e risolti più facilmente e più velocemente.
In conclusione
Le pratiche di continuous integration e continuous deployment sono importantissime: permettono di avere un buon processo di continuous delivery, per ottenere risultati di qualità e feedback frequenti, al fine di avere un miglioramento continuo sul processo di sviluppo che un team implementa.
QRP International è un ente di formazione accreditato di PeopleCert a nome di Axelos, Project Management Institute e APMG International. Se vuoi scoprire di più sul mondo delle certificazioni ed essere sempre aggiornato sulle best practice applicate al mondo del lavoro, leggi il nostro blog!