Jump to section

Cosa si intende con CI/CD?

Copia URL

CI/CD è un metodo per la distribuzione frequente delle app ai clienti, che prevede l'introduzione dell'automazione nelle varie fasi di sviluppo applicativo. Si basa principalmente 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 denominata "inferno dell'integrazione".

Nello specifico, il metodo CI/CD introduce l'automazione costante e il monitoraggio continuo per tutto il ciclo di vita delle applicazioni, dalle fasi di integrazione e test a quelle di distribuzione e deployment. Tali processi interconnessi, che insieme formano quella che viene spesso definita "pipeline CI/CD", sono supportati da team operativi e di sviluppo che collaborano secondo una metodologia agile con un approccio DevOps o site reliability engineering (SRE).

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. Il problema può essere ulteriormente complicato dal fatto che ogni sviluppatore ha personalizzato il proprio ambiente di sviluppo integrato (IDE) locale, invece di concordare con il team un IDE unico, basato su cloud.

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.

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 nella pipeline di sviluppo. Obiettivo della distribuzione continua è disporre di un code base sempre pronto a 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.

La fase conclusiva di una pipeline CI/CD matura è 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 della pipeline 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 a un'applicazione cloud che supera tutti i test automatizzati può diventare effettiva pochi minuti dopo la sua scrittura. 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 strumenti CI/CD possono essere utili per automatizzare lo sviluppo, il deployment e i test. Alcuni strumenti gestiscono specificamente l'aspetto dell'integrazione (CI), alcuni gestiscono sviluppo e deployment (CD), altri sono specifici per i test continui o le funzioni correlate.

Uno degli strumenti open source più noti per CI/CD è il server di automazione Jenkins, progettato per gestire qualsiasi elemento da un semplice ferro per di integrazione continua a un hub completo di distribuzione continua.

Tekton Pipelines è un framework di CI/CD per piattaforme Kubernetes che offre un'esperienza CI/CD cloud native standard con container.

Oltre a Jenkins e Tekton Pipelines, tra gli altri strumenti CI/CD open source che può essere utile approfondire si annoverano:

  • Spinnaker, una piattaforma CD pensata per gli ambienti multicloud.

  • GoCD, un server CI/CD incentrato sulla modellazione e sulla visualizzazione.

  • Concourse, "una risorsa continua open source".

  • Screwdriver, una piattaforma di creazione progettata per CD.

Per i team può essere utile prendere in considerazione il ricorso a strumenti CI/CD gestiti, disponibili da una serie di fornitori diversi. Tutti i principali provider di cloud pubblico offrono soluzioni CI/CD, insieme a GitLab, CircleCI, Travis CI, Atlassian Bamboo e molti altri.

Inoltre, tutti gli strumenti essenziali per DevOps possono far parte di un processo CI/CD. Gli strumenti per l'automazione della configurazione (come Ansible, Chef e Puppet), i runtime dei container (come Docker, rkt e cri-o) e l'orchestrazione dei container (Kubernetes) non sono strettamente strumenti CI/CD, ma sono presenti in molti flussi di lavoro CI/CD.

Esistono diversi modi per implementare un approccio CI/CD. Puoi scegliere in base alla tua strategia di sviluppo delle applicazioni e al tuo provider di servizi cloud. Red Hat® OpenShift® Service on AWS dispone di diverse opzioni per semplificare il tuo flusso CI/CD. Tra queste citiamo Tekton e OpenShift Pipelines. Utilizzando Red Hat OpenShift, puoi sfruttare approcci CI/CD per automatizzare la creazione, il test e il deployment di un'applicazione su più piattaforme, on premise e cloud.

Continua a leggere

Articolo

DevOps Engineer: chi è e che mansioni svolge

Un ingegnere DevOps possiede competenze ed esperienze specifiche che promuovono collaborazione, innovazione e trasformazione all'interno di un'azienda.  

Articolo

Cosa si intende con CI/CD?

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.

Articolo

Cos'è la metodologia DevSecOps?

Per sfruttare tutta l'agilità e la reattività di un approccio DevOps, occorre tenere conto anche di un altro elemento indispensabile dell'intero ciclo di vita delle applicazioni: la sicurezza IT.