Jump to section

Cosa si intende con CI/CD?

Copia URL

2024: I trend globali della tecnologia

Il settore delle tecnologie ha subito una rapida trasformazione, richiedendo alle organizzazioni di rivedere le proprie priorità per le aree di business più importanti. Come negli scorsi 10 anni, continuiamo a condividere le novità del settore. Nel rapporto Global Tech Trends per il 2024, abbiamo evidenziato le 6 priorità di investimento in ambito tecnologico e non tecnologico e 3 ostacoli al progresso.

La sigla CI/CD indica l'integrazione e la distribuzione continue, il cui scopo è semplificare e accelerare il ciclo di sviluppo dei software.

L'integrazione continua (CI) consiste nell'integrazione frequente e automatica delle modifiche al codice in un repository condiviso del codice sorgente. La distribuzione continua e/o il deployment continuo (CD) è un processo in due parti durante il quale le modifiche al codice vengono integrate, testate e distribuite. La distribuzione automatica non corrisponde completamente al deployment continuo, che rilascia in automatico gli aggiornamenti nell'ambiente di produzione.

 

CI/CD Flow

 

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 in modo agile con un approccio DevOps o SRE (site reliability engineering).

Il metodo CI/CD aiuta le organizzazioni a ridurre il rischio di bug o errori del codice, e a tempo stesso consente la continuità del ciclo di sviluppo e aggiornamento del software. 

Le app stanno diventando sempre più strutturate e le caratteristiche del metodo CI/CD contribuiscono a ridurre le complessità, aumentare l'efficienza e ottimizzare i flussi di lavoro.

Il metodo CI/CD automatizza quegli interventi (solitamente eseguiti manualmente da operatori umani) necessari per ricavare nuovo codice da un'applicazione e usarlo in produzione. In questo modo, il downtime è ridotto al minimo e i rilasci di codice avvengono più rapidamente. Inoltre, grazie alla possibilità di accelerare l'integrazione degli aggiornamenti e delle modifiche al codice, i suggerimenti degli utenti possono essere incorporati con maggiore frequenza ed efficienza. Il risultato è il miglioramento dell'esperienza utente e l'aumento del livello generale di soddisfazione dei clienti. 

Le lettere "CI" nella sigla CI/CD fa sempre riferimento all'integrazione continua, un processo di automazione per gli sviluppatori che consente di riportare più facilmente e con maggiore frequenza le modifiche apportate al codice in un'unica diramazione. Durante l'esecuzione di questi aggiornamenti, vengono avviati test automatici per verificare che le modifiche al codice siano affidabili. 

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. 

Quando uno sviluppatore che lavora da solo esegue una modifica in un'applicazione, è possibile che questa sia incompatibile con le modifiche introdotte contemporaneamente 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.

La CI è un modo per risolvere il problema di avere contemporaneamente troppe diramazioni di un'app in fase di sviluppo, con il rischio che queste non siano compatibili fra di loro.

Cosa succede quando la CI va a buon fine? Una volta integrate, le modifiche apportate dallo sviluppatore a un'applicazione vengono convalidate con l'esecuzione automatica della creazione dell'app e di vari livelli di test, solitamente dell'unità e dell'integrazione. In questo modo si verifica che le modifiche non abbiano compromesso il funzionamento dell'app. I test automatici coinvolgono tutti gli aspetti dell'app, dalle classi al funzionamento fino ai moduli. Se i test rilevano l'incompatibilità del codice nuovo con quello esistente, la CI rende più semplice la correzione rapida e frequente dei bug.

"CD" può indicare la distribuzione continua e/o il deployment continuo, concetti correlati e usati di frequente in modo intercambiabile. Entrambi fanno riferimento all'automazione delle fasi avanzate della pipeline, ma a volte vengono utilizzati separatamente per indicare un diverso livello di automazione. I team operativi e di sviluppo possono scegliere tra distribuzione continua e deployment continuo a seconda della tolleranza al rischio e delle proprie esigenze specifiche.

 La distribuzione continua automatizza il rilascio su un repository del codice convalidato, in seguito all'automazione delle build e dei test di unità e integrazione nella fase di CI. Per assicurare l'efficacia del processo di distribuzione continua, è importante che la CI sia già integrata nella pipeline di sviluppo.

Nella distribuzione continua, ogni passaggio (dall'unificazione delle modifiche al codice alla distribuzione delle build in produzione) richiede l'automazione dei test e dei rilasci di codice. Al termine di questo processo, il team operativo è in grado di distribuire rapidamente un'app in produzione.

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. Questo è un modo per affrontare i problemi di visibilità e comunicazione tra i team di sviluppo e quelli business. Lo scopo dell'adozione della distribuzione continua è di avere a disposizione un code base sempre pronto al deployment in un ambiente di produzione e di garantire che la distribuzione di un nuovo codice richieda il minor sforzo possibile.

L'ultima fase di una pipeline CI/CD matura è il deployment continuo. Il deployment continuo è un ampliamento del concetto di distribuzione continua e può riferirsi al rilascio automatico delle modifiche apportate dallo sviluppatore dal repository alla produzione, dove diventano fruibili ai clienti.

Il deployment continuo attenua il carico di lavoro eccessivo dei team operativi che devono effettuare attività manuali, con un conseguente rallentamento della distribuzione dell'app. Sfrutta quindi i vantaggi della distribuzione continua, automatizzando la fase successiva della pipeline.

Nella pratica, il deployment continuo fa sì che la modifica apportata da uno sviluppatore a un'applicazione cloud che supera tutti i test automatizzati possa diventare effettiva pochi minuti dopo la sua scrittura. Grazie al CD, ricevere e integrare il feedback inviato dagli utenti con cadenza costante è più facile. Nel loro insieme, tutte queste procedure interconnesse CI/CD riducono i rischi legati al deployment di un'app, in cui è più semplice rilasciare le modifiche all'app in piccole parti piuttosto che tutte insieme. 

Tuttavia, poiché nella fase pre-produzione della pipeline non ci sono controlli manuali, il deployment continuo dipende fortemente da test automatici ben progettati. Ciò significa che il deployment continuo può richiedere un ingente investimento iniziale, dal momento che i test automatizzati devono essere compatibili con le diverse fasi di verifica e rilascio nella pipeline CI/CD.

L'approccio CI/CD è una componente fondamentale della metodologia DevOps, il cui scopo è incrementare la collaborazione tra i team di sviluppo e quelli operativi. Entrambi i metodi sono incentrati sull'automazione dei processi di integrazione del codice, accelerando così il passaggio di un'idea (come una nuova funzione, la correzione di un bug o una richiesta di potenziamento) dalla fase di sviluppo a quella di deployment, in un ambiente di produzione in cui può offrire un valore aggiunto all'utente.

Nel framework DevOps collaborativo, la sicurezza è una responsabilità di tutti, integrata dall'inizio alla fine. Si tratta di un concetto talmente importante che alcuni hanno coniato il termine "DevSecOps" per sottolineare quanto sia fondamentale creare una base sicura per le iniziative DevOps. DevSecOps (sviluppo, sicurezza e operazioni) è un approccio alla cultura, all'automazione e alla progettazione delle piattaforme che integra la sicurezza come responsabilità condivisa lungo l'intero ciclo di vita dell'IT. Un elemento chiave di DevSecOps è l'introduzione di una pipeline CI/CD sicura.

La sicurezza CI/CD è impiegata per tutelare le pipeline di codice con controlli e test automatizzati con l'obiettivo di prevenire le vulnerabilità nella distribuzione del software. Integrare i sistemi di sicurezza nella pipeline, attraverso metotodi quali la sicurezza shift left e shift right, permette di proteggere il codice dagli attacchi e prevenire le perdite di dati, e garantisce al contempo la conformità alle policy e il controllo qualità.

La mancanza o l'inadeguatezza di misure di sicurezza applicate ai frequenti cicli di sviluppo e deployment può esporre la pipeline a svariati rischi:

  • Esposizione di dati sensibili a sorgenti esterne
  • Utilizzo di codice non sicuro o componenti di terze parti
  • Accesso non autorizzato a strumenti di compilazione o repository di codice sorgente

Grazie all'identificazione e alla riduzione delle vulnerabilità nel ciclo di sviluppo del software, le modifiche al codice vengono testate in modo accurato e risultano conformi agli standard di sicurezza prima della distribuzione in produzione.

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.

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

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

  • Jenkins, progettato per una gestione completa di elementi di varia complessità, da un semplice server CI a un hub completo CD
  • 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 la CD.

Per i team può essere utile prendere in considerazione il ricorso a strumenti CI/CD gestiti, disponibili presso 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. 

I nostri esperti possono aiutare la tua organizzazione a sviluppare le procedure, gli strumenti e la cultura necessari a rinnovare in modo più efficiente le tue applicazioni esistenti e realizzarne di nuove di tipo cloud native.

Red Hat® OpenShift,® aiuta le organizzazioni ad aumentare la produttività degli sviluppatori, automatizzare le pipeline CI/CD e anticipare le attività di sicurezza in tutto il ciclo di sviluppo.

La soluzione Red Hat OpenShift Pipelines è progettata per eseguire ogni singola fase della pipeline CI/CD in un container dedicato e per sfruttare la scalabilità necessaria a rispondere alle esigenze della pipeline. In questo modo gli amministratori e gli sviluppatori possono creare modelli di pipeline per le applicazioni basati sui requisiti specifici dell'organizzazione in materia di business e sicurezza.

Red Hat OpenShift GitOps è un operatore che fornisce un flusso di lavoro che integra repository Git, strumenti di integrazione/distribuzione continue (CI/CD) e Kubernetes per uno sviluppo software più rapido, sicuro e scalabile, senza compromettere la qualità. Con OpenShift GitOps i clienti possono compilare e integrare flussi di lavoro di distribuzione continua basati su Git in modo dichiarativo direttamente nella loro piattaforma di sviluppo applicativo.

Red Hat Ansible® Automation Platform include tutti gli strumenti necessari per estendere l'automazione all'intera organizzazione, tra cui una soluzione basata sugli eventi, strumenti per l'analisi e raccolte di contenuti predefiniti. Utilizzando un approccio alla condizione target e un linguaggio comune basato su YAML è possibile avvalersi degli stessi contenuti di automazione per le operazioni quotidiane e per la pipeline CI/CD. Poiché questa soluzione funziona in qualsiasi ambito dell'infrastruttura, ti permette di distribuire con facilità e rapidità ambienti di sviluppo, test e produzione uniformi, che incrementano l'affidabilità e la resilienza delle applicazioni.

L'integrazione di Ansible Automation Platform con Red Hat Advanced Cluster Management for Kubernetes agevola l'orchestrazione dei cluster Kubernetes nella pipeline CI/CD. Per realizzare e gestire gli operatori di Red Hat OpenShift è possibile utilizzare anche il linguaggio di automazione leggibile dagli utenti.

Approfondisci

Articolo

Ingegnere DevOps: 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 per 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.