DevOps

Cosa si intende con CI/CD?

CI/CD è un metodo per la distribuzione frequente delle app ai clienti, che prevede l'introduzione dell'automazione nelle fasi di sviluppo dell'applicazione. Principalmente, si basa sui concetti di integrazione, distribuzione e deployment continui. L'approccio CI/CD supera le difficoltà legate all'integrazione di nuovo codice, una situazione così problematica per i team operativi e di sviluppo da essere coniata "inferno dell'integrazione".

Più specificamente, il metodo CI/CD introduce l'automazione costante e il monitoraggio continuo in tutto il ciclo di vita delle applicazioni, dalle fasi di integrazione e test a quelle di distribuzione e deployment. Nel complesso, questi processi interconnessi vengono definiti “flussi CI/CD” e sono supportati dai team operativi e di sviluppo che collaborano secondo modalità agili.


I tanti significati degli acronimi CI e CD

Gli acronimi CI e CD possono assumere vari significati. In CI/CD “CI” si riferisce sempre all'integrazione continua, un processo di automazione per gli sviluppatori. Per la riuscita dell'integrazione continua, le nuove modifiche apportate al codice dell'app vengono regolarmente compilate, testate e unite in un repository condiviso, risolvendo così il problema dei conflitti tra le numerose diramazioni di un'applicazione in fase di sviluppo.

"CD" può indicare invece la distribuzione continua e/o il deployment continuo, concetti correlati e usati di frequente in modo intercambiabile. Entrambi prevedono l'automazione delle fasi successive del flusso, ma sono a volte usati distintamente per indicare il livello di automazione applicato.

Con distribuzione continua si intende il processo con il quale le modifiche apportate da uno sviluppatore all'applicazione vengono automaticamente testate alla ricerca di bug e caricate in un repository (come GitHub o un registro per container), dal quale vengono distribuite in un ambiente di produzione dai team operativi. È una soluzione al problema della scarsa visibilità e comunicazione tra i team di sviluppo e quelli operativi. In questo senso la distribuzione continua ha il fine di garantire interventi manuali minimi per distribuire il nuovo codice.

L'altro acronimo possibile per "CD", deployment continuo, può riferirsi al rilascio automatico delle modifiche apportate dallo sviluppatore dal repository alla produzione, dove diventano fruibili ai clienti. In tal modo, si evita di sovraccaricare i team operativi con procedure manuali, che altrimenti rallenterebbero la distribuzione delle applicazioni. Questa fase sfrutta i vantaggi della distribuzione continua, automatizzando la fase successiva del flusso.

In alcuni casi CI/CD specifica solo le procedure correlate di integrazione continua e distribuzione continua, ma può anche indicare tutte e tre le pratiche, includendo anche il deployment continuo. A complicare il tutto, a volte l'uso di “distribuzione continua” sottintende anche i processi di deployment continuo.

Non è sempre necessario perdersi in queste sfumature semantiche: è sufficiente ricordare che con CI/CD si intende un processo, spesso visualizzato come flusso, che prevede l'aggiunta di un elevato livello di automazione costante e monitoraggio continuo allo sviluppo delle applicazioni. L'esatto significato del termine dipenderà, di volta in volta, dalla quantità di automazione integrata nel flusso di CI/CD. Molte aziende iniziano aggiungendo l'integrazione continua per poi automatizzare distribuzione e deployment in corso d'opera, ad esempio come parte di applicazioni cloud-native.


Integrazione continua

Nello sviluppo di applicazioni innovative, l'obiettivo è quello di avere più sviluppatori che lavorino simultaneamente su diverse funzioni della stessa app. Se, tuttavia, un'organizzazione prevede di unificare tutte le diramazioni del codice sorgente in un'unica giornata (definita dagli sviluppatori come “merge day”), le attività che ne risultano possono essere noiose, manuali ed esigenti in termini di tempo. Ciò accade quando uno sviluppatore apporta, in modo indipendente, modifiche all'applicazione che sono divergenti da quelle completate simultaneamente da altri sviluppatori.

Adottando l'integrazione continua, gli sviluppatori possono riportare le modifiche apportate al codice in un'unica diramazione (o ramo) condivisa con frequenza maggiore, a volte anche quotidianamente. Una volta unificate, le modifiche vengono convalidate tramite la compilazione automatica dell'applicazione e l'esecuzione di diversi livelli di test automatici, in genere test di unità e integrazione finalizzati a garantire che le modifiche non abbiamo causato danni. Nella fase di test viene esaminato ogni elemento costituente l'intera applicazione, dalle classi alle funzioni fino ai vari moduli. Se viene individuato un conflitto tra il codice nuovo e quello esistente, l'integrazione continua ne agevola la correzione.


Distribuzione continua

Successivamente all'automazione delle build e ai test di integrazione e unità previsti da CI, la distribuzione continua automatizza il rilascio del codice convalidato in un repository. Ne consegue che, perché il processo di distribuzione continua sia efficace, è importante che il CI sia già integrato nel flusso di sviluppo. Obiettivo della distribuzione continua è disporre di un codice base sempre pronto ad essere distribuito in un ambiente di produzione.

Nella distribuzione continua, ogni fase, dall'unione delle modifiche al codice alla distribuzione di build production-ready, prevede l'automazione dei test e del rilascio del codice. Al termine del processo il team operativo è in grado di eseguire il deployment di un'app in produzione in modo rapido e semplice.


Deployment continuo

La fase conclusiva di un flusso CI/CD maturo è il deployment continuo. Come estensione della distribuzione continua, che automatizza il rilascio di una build production-ready in un repository di codice, il deployment continuo automatizza il rilascio dell'app in produzione. Non essendoci alcun blocco manuale nelle fasi del flusso prima della produzione, il deployment continuo deve necessariamente fare affidamento su un'automazione dei test ben progettata.

Nella pratica, il deployment continuo fa sì che la modifica apportata da uno sviluppatore all'applicazione possa diventare attiva a pochi minuti dalla sua scrittura, a condizione che superi la fase di test automatizzata. Grazie a questo metodo, ricevere e integrare i feedback inviati dagli utenti con cadenza costante è più facile. Nel complesso, queste procedure di CI/CD interrelate rendono lo sviluppo di un'applicazione meno rischioso, perché consentono di rilasciare le modifiche alle applicazioni in piccole parti e non tutte insieme. Implicano tuttavia un forte impegno iniziale, poiché è necessario scrivere test automatizzati che siano adatti alla vasta gamma di fasi di test e rilascio previste dal flusso CI/CD.

Gli elementi fondanti del flusso CI/CD

Automation

CI/CD requires custom coding and working with multiple software packages. Ansible is an open source automation language with all these capabilities in one composition.

Services

Speed up your next app development project. Our experts will guide your team to make use of innovative open source technologies, build prototypes, and solve the most vexing issues.

Scopri gli altri vantaggi dell'approccio CI/CD