Integrazione continua

menu icon

Integrazione continua

In questa guida, scopri di più sull'integrazione continua, una prassi di sviluppo software e DevOps in cui ogni sviluppatore integra il suo nuovo codice nel ramo di codice principale almeno una volta al giorno.

Cos'è l'integrazione continua?

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. Su ciascuna iterazione della build viene eseguito un test automatizzato per identificare precocemente i problemi di integrazione, quando sono più facili da correggere, cosa che aiuta anche ad evitare problemi nella fase di 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.

Confronto tra integrazione continua (CI, continuous integration), fornitura continua (CD, continuous delivery) e implementazione continua

Con l'integrazione continua, ogni sviluppatore integra il proprio lavoro con il ramo principale del codice sorgente almeno una volta al giorno (o, preferibilmente, più volte al giorno). La fornitura continua, un'altra prassi DevOps, si concentra invece sulla fornitura delle eventuali modifiche convalidate alla base di codice - aggiornamenti, correzioni di bug e anche nuove funzioni - agli utenti nel modo più rapido e sicuro possibile. L'implementazione continua semplifica ulteriormente il processo, utilizzando test automatizzati per convalidare le modifiche alla base di codice, consentendo aggiornamenti più immediati.

La fornitura continua subentra laddove termina l'integrazione continua, automatizzando la fornitura di applicazioni ad ambienti di infrastruttura selezionati. Garantisce l'automazione dell'esecuzione del push delle modifiche al codice verso diversi ambienti, come quelli di sviluppo, test e produzione.

Vantaggi

Di seguito sono riportati alcuni dei vantaggi più significativi forniti dall'integrazione continua:

  • Progresso continuo e dimostrato per un feedback migliorato
  • Rilevamento degli errori precoce e migliorato e metriche che ti consentono di occuparti prima degli errori, a volte entro pochi minuti dal check-in
  • Collaborazione del team migliorata; ognuno nel team può modificare il codice, integrare il sistema e determinare rapidamente i conflitti con altre parti del software
  • Integrazione del sistema migliorata, che riduce le sorprese alla fine del ciclo di vita dello sviluppo del software
  • Meno modifiche parallele per l'unione e il test
  • Numero ridotto di errori durante i test di sistema
  • Sistemi aggiornati costantemente rispetto ai quali eseguire i test

Integrazione continua (CI, continuous integration), Agile e DevOps

Agile

Per Agile si intende una prassi di sviluppo del software che migliora il modo in cui i team di sviluppo software si organizzano, si adattano alle variazioni dei requisiti e rilasciano il software. Poiché l'integrazione continua (link esterno a IBM) e lo sviluppo di tipo Agile (PDF, 153 KB) condividono molte delle stesse caratteristiche (ad esempio, l'automazione dei test), può essere utile parlare di integrazione continua e di tipo Agile allo stesso tempo. 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 tu integri il lavoro frequentemente, spesso molte volte al giorno. Verifichi l'integrazione 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 al cambiamento in modo da poter ridimensionare e far evolvere le soluzioni nel corso del 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.

DevOps

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.

Strumenti di integrazione continua open source

Quelli qui di seguito indicati sono alcuni dei più diffusi strumenti di integrazione continua:

  • Jenkins: Uno strumento di integrazione continua open source ampiamente utilizzato, Jenkins consente agli sviluppatori di eseguire automaticamente la build, l'integrazione e il test di codice non appena ne seguono il commit al repository di origine, rendendo loro più facile il rilevamento precoce di bug e consentendo loro di implementare il software più rapidamente. Il plug-in docker è disponibile su Jenkins.
  • Buildbot: Buildbot può automatizzare tutti gli aspetti del ciclo di sviluppo del software. Come un sistema di pianificazione dei lavori, accoda ed esegue i lavori e notifica i risultati.
  • Go: Ciò che distingue Go è il concetto di pipeline, che rende facile la modellazione di flussi di lavoro di build complessi.
  • IBM UrbanCode Build
  • Travis CI: Una delle soluzioni in hosting più affidabili e presenti sul mercato da più tempo, è disponibile anche in una versione on-premises per l'azienda.
  • GitLab CI: Parte integrante del progetto open source Rails, GitLab CI è un servizio in hosting gratuito che fornisce una gestione dettagliata dei repository git con funzioni quali, tra le altre, il controllo degli accessi, il tracciamento dei problemi e le revisioni del codice.

Condurre un'integrazione continua con strumenti open source offre molti vantaggi, tra cui:

  • Centinaia di plug-in che possono supportare il tuo progetto
  • Ampio supporto per i linguaggi open source, come Python, Java e JavaScript
  • Nessun costo, offrendo agli studenti, alle startup e agli sviluppatori che ci si dedicano in aggiunta al loro lavoro ordinario un potente strumento che non grava sul budget
  • Personalizzazione, consentendo agli sviluppatori di prendere uno strumento CI e utilizzarlo come base sulla quale eseguire le loro attività di sviluppo in modo rispondente alle loro esigenze
  • La capacità di modificare e ridistribuire gli strumenti

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.

Caso di utilizzo

Il seguente caso di utilizzo 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.

Negoziare quando avverrebbero queste combinazioni e questi test consumerebbe tantissimo tempo degli sviluppatori.

Per farlo dovrebbero concordare:

  1. Quando iniziare a testare l'integrazione del codice
  2. Come testare che l'integrazione abbia avuto successo
  3. Come comunicare i risultati al team

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 con successo.

Oppure, se utilizzi un linguaggio compilato, il test predefinito consisterà nel verificare se il codice viene compilato correttamente. In caso negativo, il nuovo codice ha rotto la build. Per i linguaggi come Python o JavaScript, devi creare un tuo test di integrazione.

In ogni caso, la maggior parte dei sistemi CI registra i tentativi di integrazione, la percentuale di successo e altre metriche.

Server

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:

  • Eseguire build, test e rilasci automatici in una singola ubicazione
  • Implementare qualsiasi versione, in qualsiasi momento
  • Mantenere ordinata la configurazione
  • Supportare i plug-in per migliorare la funzionalità
  • Monitorare il repository del tuo progetto
  • Eseguire il pull delle modifiche ed eseguire le attività che hai definito per un commit di successo
  • Inviare un feedback ai membri del progetto pertinenti con i dettagli della build

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 hai solo una singola fase di test, il 30% dell'integrazione continua coinvolge un test. In realtà le attività di integrazione continua sono formate dal 50% al 70% di test. Un tempo bisognava completare i test manualmente. Ora puoi 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 testa un caso di utilizzo per volta in modo iterativo per garantire la copertura di test, migliorare la qualità del codice e creare le condizioni per la fornitura continua. Il test automatizzato ti dice 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 implementazioni- 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

Il processo di integrazione continua è un componente critico di DevOps, che ti aiuta a unificare i tuoi 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:

  • Mantieni un unico repository di codice sorgente: utilizza la gestione del controllo del codice sorgente per tracciare e controllare tutti i file per la creazione di un prodotto. Questa base di codice consolidata rende più facile la distribuzione e la visibilità.
  • Automatizza la build: questo implica la compilazione, il collegamento e altri processi che producono gli elementi di build. Anche gli autotest dovrebbero essere automatizzati.
  • Utilizza commit giornalieri alla linea principale: forza gli sviluppatori a eseguire il commit delle loro modifiche al flusso di sviluppo principale almeno una volta al giorno. Ogni sviluppatore deve verificare che la sua copia di lavoro sia coerente con il flusso di sviluppo principale.
  • Esegui il test in un clone dell'ambiente di produzione: rendi l'ambiente di test il più simile possibile al tuo ambiente di produzione finale.
  • Automatizza l'implementazione: implementa più ambienti (sviluppo, integrazione, produzione) per eseguire build e test.

Integrazione continua e IBM Cloud®

L'approccio di IBM è quello di definire e automatizzare i progetti e configurare la sicurezza utilizzando dei template. Quando viene apportata una modifica a una libreria, le applicazioni dipendenti vengono create di nuovo e connesse, collegate o ricollegate. Comprendere le dipendenze delle applicazioni ti aiuterà a modernizzare le tue applicazioni.

Man mano che le organizzazioni accelerano questa trasformazione digitale, il bisogno di automazione cresce nelle operazioni di business e IT. Un passo verso una maggiore automazione deve iniziare con piccoli progetti di successo e misurabili, che puoi quindi ridimensionare e ottimizzare per altri processi e in altre parti della tua organizzazione.

Lavorando con IBM, avrai accesso a funzionalità di automazione basate sull'AI, inclusi dei flussi di lavoro predefiniti, per contribuire ad accelerare l'innovazione rendendo ogni processo più intelligente.

Passa alla fase successiva:

- Inizia a gestire le tue build di software, comprese la scalabilità e la configurazione, con l'aiuto di IBM® UrbanCode® Build.

- Scopri i cinque elementi necessari per il successo dell'automazione (link esterno a IBM) in questo report di HFS Research.

Inizia con un account IBM Cloud oggi stesso.