L'integrazione continua è un processo di sviluppo software in cui gli sviluppatori integrano il nuovo codice che hanno scritto più frequentemente durante tutto il ciclo di sviluppo, aggiungendolo alla base di codice almeno una volta al giorno. Vengono eseguiti test automatici su ogni iterazione della build per identificare gli eventuali problemi di integrazione in anticipo, quando sono più semplici da risolvere, il che consente di evitare problemi durante l'unione finale per la release. Complessivamente, l'integrazione continua aiuta a semplificare il processo di build, producendo un software di qualità superiore e pianificazioni della fornitura più prevedibili.
Per definizione, DevOps delinea un processo di sviluppo del software e un cambiamento di cultura organizzativa che accelera la distribuzione di software di qualità superiore automatizzando e integrando gli sforzi dei team di sviluppo e funzionamento IT, due gruppi che tradizionalmente operano separatamente l'uno dall'altro, o in silos.
In pratica, i processi e le culture DevOps migliori si estendono oltre lo sviluppo e le operazioni per incorporare gli input di tutti i soggetti interessati dell'applicazione, compresi la progettazione della piattaforma e dell'infrastruttura, la sicurezza, la conformità, la governance, la gestione del rischio, la linea di business, gli utenti finali e i clienti, nel ciclo di vita di sviluppo del software.
Nel framework DevOps, l'integrazione continua si colloca all'inizio del processo di sviluppo del software, dove esegui il check-in del tuo codice almeno una volta al giorno per evitare che le tue copie locali si discostino troppo dal ramo principale della build del codice. Questo ti aiuta ad evitare conflitti di unione disastrosi che potrebbero "rompere" la build e la cui soluzione potrebbe costare al team ore se non giorni.
L'integrazione continua funge da prerequisito per le fasi di test, implementazione e rilascio della fornitura continua. L'intero team di sviluppo saprà entro pochi minuti dal check-in se hai creato del codice non valido, visto che il servizio di integrazione continua esegue automaticamente la build e il test delle tue modifiche al codice per rilevare eventuali errori.
La fornitura continua e l'implementazione continua seguono l'integrazione continua nel ciclo DevOps.
La fornitura continua (continuous delivery, CD) subentra laddove termina l'integrazione continua, automatizzando la fornitura di applicazioni ad ambienti di infrastruttura selezionati. La CD si concentra sulla fornitura agli utenti delle eventuali modifiche convalidate alla base di codice, aggiornamenti, correzioni di bug e anche nuove funzioni, nel modo più rapido e sicuro possibile. Garantisce l'automazione dell'esecuzione del push delle modifiche al codice verso diversi ambienti, come quelli di sviluppo, test e produzione.
Nell'implementazione continua, le modifiche al codice di un'applicazione vengono rilasciate automaticamente nell'ambiente di produzione. Questa automazione è basata su una serie di test predefiniti. Dopo che i nuovi aggiornamenti hanno superato questi test, il sistema li invia direttamente agli utenti del software.
I benefici comunemente citati dell'integrazione continua includono:
Agile è una prassi di sviluppo del software che migliora il modo in cui i team di sviluppo software si organizzano, si adattano alle modifiche dei requisiti e rilasciano il software. Poiché l'integrazione continua (link esterno a IBM) e lo sviluppo Agile condividono molte delle stesse funzioni (ad esempio, l'automazione dei test) può essere utile parlare contemporaneamente di integrazione continua e Agile. La prassi Agile organizza lo sviluppo in gruppi di lavoro o sprint più piccoli. Quando sono applicate in DevOps, queste prassi combinate aiutano a garantire la qualità del software e la flessibilità dei progetti.
L'integrazione continua richiede che il lavoro venga integrato frequentemente, spesso molte volte al giorno. L'integrazione viene verificata mediante una build automatizzata che rileva gli errori di integrazione il prima possibile. La build deve includere dei test di esecuzione come parte della verifica. L'estensione di test rapidi ai test di runtime in un ambiente di test automatizzato porta naturalmente verso una fornitura continua.
Agile (link esterno a IBM) è anche iterativo e si adatta ai cambiamenti, in modo da poter scalare ed sviluppare le soluzioni nel tempo. Nel contesto dell'integrazione continua, lo sviluppo del software di tipo Agile consiste nel fornire interazioni software in base al modo in cui assegni la priorità al valore delle funzioni man mano che esegui l'integrazione in modo continuo.
Gli strumenti di integrazione continua open source più popolari includono:
Condurre un'integrazione continua con strumenti open source offre molti vantaggi, tra cui:
Gli strumenti di integrazione continua open source da prendere in considerazione per il tuo flusso di lavoro di sviluppo del software includono Jenkins, Go, Buildbot e Travis CI, di cui puoi leggere nella sezione successiva.
Un server di integrazione continua è uno strumento software che centralizza tutte le tue operazioni di integrazione continua e fornisce una piattaforma affidabile e stabile per consentirti di sviluppare i tuoi progetti. Puoi configurare e regolare i server CI per sviluppare vari progetti per diverse piattaforme. Un server di integrazione continua modella e visualizza facilmente i flussi di lavoro complessi (consentendo la fornitura continua) e fornisce un'interfaccia intuitiva per creare delle pipeline di fornitura continua. Un server di integrazione continua offre la possibilità di:
Il seguente caso di uso ipotetico illustra in che modo due sviluppatori di software possono utilizzare l'integrazione continua per migliorare il loro processo DevOps.
I due sviluppatori devono comunicare tra loro su quali funzioni rispondono alle esigenze e in che modo. Questo piccolo team ha bisogno di aggiornamenti regolari e deve essere in grado di integrare e testare il suo codice nel suo insieme. Pianificare il check-in e il test del codice assorbe tantissimo tempo di sviluppo. È necessario un sistema automatico per l'integrazione continua.
Concordare su quando queste combinazioni e questi test dovrebbero avvenire richiederebbe molto tempo agli sviluppatori. Dovrebbero essere d'accordo su quanto segue:
Le piattaforme di integrazione continua hanno le risposte predefinite a queste domande e la maggior parte di esse consente la configurazione e l'impostazione.
Di solito, le piattaforme CI come Jenkins iniziano i test di integrazione quando viene eseguito il check-in. Quando viene eseguito il check-in del nuovo codice, il sistema CI esegue una serie di test, che possono includere unit test e test di regressione, e determinerà quindi se il codice è stato integrato correttamente.
Oppure, se si utilizza un linguaggio compilato, il test predefinito consisterà nel verificare se il codice viene compilato correttamente. In caso negativo, il nuovo codice avrà interrotto la build. Per i linguaggi come Python o JavaScript, è necessario creare un proprio test di integrazione.
In ogni caso, la maggior parte dei sistemi CI registra i tentativi di integrazione, la percentuale di successo e altre metriche.
L'importanza del test
Il test continuo inizia quando produci una build di integrazione continua e un pacchetto (noto anche come entità installabile o entità impacchettata). Si arresta quando tale entità impacchettata va in produzione. Ogni passo, dall'inizio alla fine, coinvolge una suite di test.
Come minimo, quando è prevista una sola fase di test, il 30% dell'integrazione continua è dedicata al test. In realtà le attività di integrazione continua sono formate dal 50% al 70% di test. Un tempo bisognava completare i test manualmente. Ora è possibile utilizzare i test automatizzati, la chiave per un'integrazione continua di successo.
Come parte dell'automazione del test per l'integrazione continua, lo sviluppo basato sui test esegue la build del codice e verifica un caso di uso per volta in modo iterativo per garantire la copertura dei test, migliorare la qualità del codice e creare le condizioni per la fornitura continua. Il test automatizzato informa se il nuovo codice non ha superato uno o più dei test sviluppati in tutte le aree funzionali dell'applicazione. Una best practice richiede agli sviluppatori di eseguire tutti i test, o un loro sottoinsieme, nei loro ambienti locali, il che garantisce che gli sviluppatori eseguano il commit del codice sorgente al controllo della versione solo dopo che le nuove modifiche al codice hanno superato i loro test. L'esperienza dimostra che un test di regressione efficace può aiutare a evitare poi in seguito sorprese non gradite.
Pipeline di integrazione continua
Una pipeline di integrazione continua automatizza le fasi della pipeline di un progetto, come le build, i test e le distribuzioni, in un modo ripetibile, con un intervento umano ridotto al minimo. Un pipeline di integrazione continua automatizzata è fondamentale per semplificare lo sviluppo, il test e l'implementazione delle tue applicazioni abilitando controlli, punti di verifica e velocità.
Best practice di integrazione continua
Il processo di integrazione continua è un componente critico di DevOps, che aiuta a unificare i team di sviluppo e di operazioni in un repository condiviso per la codifica, il test, l'implementazione e il supporto di software. Di seguito sono riportate alcune best practice di CI che possono aiutarti ad avere successo:
Configura ed esegui le build software con il tool IBM Urbancode Build, una soluzione di gestione di build su scala aziendale che utilizza un sistema basato su modelli.
DevOps velocizza la fornitura di software di qualità superiore combinando e automatizzando il lavoro dei team di sviluppo software e di operazioni IT.
La fornitura continua automatizza la fornitura di applicazioni agli ambienti di test e produzione.
Una guida pratica alla pipeline CI/CD (integrazione continua/fornitura continua)..