Che cos'è la continuous integration?
Sviluppa l'agilità del tuo team con feedback più rapidi. Non dimenticare che l'avanzamento va di pari passo con i test.
La continuous integration (CI) è una pratica di automatizzazione dell'integrazione delle modifiche al codice apportate da più collaboratori all'interno di un progetto software. È una best practice principale di DevOps, che consente agli sviluppatori di unire frequentemente le modifiche al codice in un repository centrale dove poi vengono eseguiti le build e i test. Gli strumenti automatizzati vengono utilizzati per affermare la correttezza del nuovo codice prima dell'integrazione.
Un sistema di controllo delle versioni del codice sorgente è il punto cruciale del processo di CI. Il sistema di controllo delle versioni è inoltre integrato da altri controlli come test automatizzati della qualità del codice, strumenti di revisione dello stile della sintassi e molto altro.
Come ottenere la continuous integration
Scopri come adottare la continuous integration e i test automatizzati in 5 passaggi. Leggi l'articolo
Cinque consigli per repository Git compatibili con la CI
Cinque consigli per sfruttare al meglio Git e il tuo strumento di continuous integration! Leggi l'articolo
Strumenti di continuous integration
Cinque consigli per sfruttare al meglio Git e il tuo strumento di continuous integration! Leggi l'articolo
Sviluppo basato su trunk
Lo sviluppo basato su trunk è una pratica di gestione del controllo delle versioni per cui gli sviluppatori uniscono aggiornamenti piccoli e frequenti in un "trunk" o branch principale.Leggi l'articolo
L'importanza della continuous integration
Per comprendere l'importanza della CI, è utile parlare di alcuni problemi che spesso si verificano in mancanza della CI. Senza CI, gli sviluppatori devono coordinare e comunicare manualmente quando stanno contribuendo con il codice al prodotto finale. Questo coordinamento va oltre i team di sviluppo, fino alle operazioni e al resto dell'organizzazione. I team di prodotto coordinano il momento del lancio in sequenza di funzioni e correzioni e stabiliscono quali membri del team saranno responsabili.
Il sovraccarico di comunicazione di un ambiente senza CI può comportare processi di sincronizzazione complessi e complicati, con conseguenti costi burocratici non necessari ai progetti. Ciò causa rilasci di codice più lenti con tassi di errore più elevati, in quanto richiede che gli sviluppatori siano sensibili e attenti alle integrazioni. Questi rischi crescono in modo esponenziale all'aumentare delle dimensioni del team di progettazione e della codebase.
Senza una solida pipeline di CI, può verificarsi una disconnessione tra il team di progettazione e il resto dell'organizzazione. La comunicazione tra prodotto e progettazione può essere complicata. La progettazione diventa una scatola nera in cui il resto del team inserisce requisiti e funzionalità e forse ottiene i risultati attesi. Sarà più difficile per i tecnici stimare i tempi di distribuzione delle richieste perché il tempo necessario per l'integrazione delle nuove modifiche diventa un rischio sconosciuto.
Cosa fa la CI
La CI consente di aumentare il numero di dipendenti e l'output di consegna dei team di progettazione. L'introduzione della CI nello scenario di cui sopra consente agli sviluppatori di software di lavorare in modo indipendente sulle funzionalità in parallelo. Quando sono pronti a eseguire il merge di queste funzionalità nel prodotto finale, possono farlo in modo indipendente e rapido. La CI è una pratica preziosa e consolidata nelle moderne organizzazioni di ingegneria del software ad alte prestazioni.
Modalità di utilizzo della CI
La CI viene generalmente utilizzata insieme a un flusso di lavoro agile per lo sviluppo del software. Un'organizzazione compilerà un elenco di attività che comprendono una tabella di marcia del prodotto. Queste attività verranno poi distribuite tra i membri del team di progettazione del software per la distribuzione. L'uso della CI consente la distribuzione di queste attività di sviluppo software in modo indipendente e in parallelo tra gli sviluppatori assegnati. Una volta completata una di queste attività, uno sviluppatore introdurrà il nuovo lavoro nel sistema di CI per integrarlo con il resto del progetto.
CI, continuous deployment e continuous delivery
Continuous integration, deployment e delivery sono tre fasi di una pipeline di rilascio software automatizzata, tra cui una pipeline DevOps. Queste tre fasi consentono di passare dall'idea alla consegna del software all'utente finale. La fase di integrazione è il primo passo del processo. La continuous integration copre il processo in cui più sviluppatori tentano di unire le modifiche al codice con il repository del codice principale di un progetto.
La continuous delivery segue la continuous integration. La fase di consegna prevede il packaging di un artefatto per la distribuzione agli utenti finali. Questa fase utilizza strumenti di compilazione automatizzata per generare questo artefatto. In questa fase di compilazione, l'artefatto viene mantenuto "verde", ovvero pronto per essere distribuito agli utenti in qualsiasi momento.
La continuous deployment è la fase finale della pipeline. La fase di distribuzione è responsabile dell'avvio e della distribuzione automatici dell'artefatto software agli utenti finali. Al momento della distribuzione, l'artefatto ha superato con successo le fasi di integrazione e consegna. Ora è il momento di distribuire automaticamente l'artefatto. Ciò avverrà tramite script o strumenti che spostano automaticamente l'artefatto su server pubblici o su un altro meccanismo di distribuzione, come un app store.
Vantaggi e sfide della continuous integration
La continuous integration è un aspetto essenziale di DevOps e dei team software ad alte prestazioni. Tuttavia, i vantaggi della CI non si limitano al team di progettazione, ma apportano grandi benefici all'intera organizzazione. La CI consente una migliore trasparenza e comprensione del processo di sviluppo e consegna del software. Questi vantaggi consentono al resto dell'organizzazione di pianificare ed eseguire meglio le strategie di go-to-market. Di seguito sono riportati alcuni dei vantaggi organizzativi complessivi della CI.
Abilitare il ridimensionamento
La CI favorisce la scalabilità delle organizzazioni in termini di dimensioni del team di progettazione, dimensione della codebase e infrastruttura. Riducendo al minimo l'integrazione del codice, la burocrazia e il sovraccarico di comunicazione, la CI aiuta a creare flussi di lavoro DevOps e agili. Consente a ogni membro del team di possedere una nuova modifica del codice fino al rilascio. La CI favorisce la scalabilità rimuovendo qualsiasi dipendenza organizzativa tra lo sviluppo di singole funzionalità. Gli sviluppatori possono ora lavorare sulle funzionalità in un silo isolato e avere la garanzia che il loro codice si integrerà perfettamente con il resto della codebase, che è un processo DevOps fondamentale.
Migliorare il ciclo di feedback
Un feedback più rapido sulle decisioni aziendali è un altro potente effetto collaterale della CI. I team di prodotto possono testare le idee e iterare la progettazione dei prodotti più velocemente con una piattaforma di CI ottimizzata. È possibile apportare rapidamente le modifiche e misurare il loro successo. I bug o altri problemi possono essere risolti e riparati rapidamente.
Migliorare la comunicazione
La CI migliora la comunicazione e la responsabilità di progettazione complessive, favorendo una maggiore collaborazione tra sviluppo e operazioni in un team DevOps. Introducendo flussi di lavoro di pull request legati alla CI, gli sviluppatori ottengono una condivisione passiva delle conoscenze. Le pull request consentono agli sviluppatori di osservare e commentare il codice degli altri membri del team. Gli sviluppatori possono ora visualizzare e collaborare sui branch di funzioni con altri sviluppatori a mano a mano che le funzionalità progrediscono attraverso la pipeline di CI. La CI può essere utilizzata anche per ridurre le spese correlate al controllo di qualità. Una pipeline di CI efficiente con una copertura automatizzata dei test ad alta affidabilità proteggerà dalle regressioni e garantirà che le nuove funzionalità corrispondano a una specifica. Prima di eseguire il merge del nuovo codice, dovrà superare la suite di asserzioni di test della CI, che impedirà qualsiasi nuova regressione.
I vantaggi della CI superano di gran lunga qualsiasi sfida correlata alla sua adozione. Detto questo, è importante essere consapevoli delle sfide della CI. Le vere sfide della CI sono correlate alla transizione di un progetto non CI a CI. La maggior parte dei progetti software moderni adotterà la CI fin dalle prime fasi di ideazione e attenuerà le sfide della successiva adozione.
Adozione e installazione
Le sfide della continuous integration riguardano principalmente l'adozione da parte del team e l'installazione tecnica iniziale. Se un team non dispone attualmente di una soluzione di CI, la scelta della soluzione e il suo avvio possono richiedere qualche sforzo iniziale. Pertanto, è necessario considerare attentamente l'infrastruttura di progettazione esistente quando si installa una pipeline di CI.
Curva di apprendimento tecnologico
La funzionalità di CI include un elenco di tecnologie di supporto che potrebbero rappresentare investimenti nell'ambito della curva di apprendimento del team. Queste tecnologie sono sistemi di controllo delle versioni, infrastruttura di hosting e tecnologie di orchestrazione.
Best practice di CI
Sviluppo basato su test
Non appena un progetto ha stabilito una pipeline di CI con code coverage del test automatica, è buona prassi sviluppare e migliorare costantemente la code coverage del test. Ogni nuova funzionalità in arrivo nella pipeline di CI dovrebbe avere una serie di test di accompagnamento per verificare che il nuovo codice si comporti come previsto.
Per Test Driven Development (TDD) si intende la pratica di scrivere il codice di test e i test case prima di eseguire qualsiasi vera codifica delle funzionalità. Un TDD puro può coinvolgere da vicino il team di prodotto per contribuire a creare una specifica di comportamento aziendale previsto, che può quindi essere trasformata in test case. In uno scenario di TDD puro, gli sviluppatori e il team di prodotto si incontreranno e discuteranno di una specifica o un elenco di requisiti. Questo elenco di requisiti verrà quindi convertito in una checklist di asserzioni di codice. Gli sviluppatori scriveranno quindi il codice che corrisponde a queste asserzioni.
Pull request e revisione del codice
La maggior parte dei team di sviluppo software moderni implementa un flusso di lavoro di pull request e revisione del codice. Le pull request sono una pratica fondamentale per la CI. Una pull request viene creata quando uno sviluppatore è pronto a eseguire il merge di un nuovo codice nella codebase principale. La pull request invia una notifica agli altri sviluppatori in merito alla nuova serie di modifiche pronte per l'integrazione.
Le pull request sono il momento opportuno per avviare la pipeline di CI ed eseguire il set di fasi di approvazione automatiche. Inoltre, solitamente viene aggiunta un'ulteriore fase di approvazione manuale al momento della pull request, durante la quale un ingegnere non stakeholder esegue una revisione del codice della funzionalità. Questo consentirà un'ulteriore revisione esperta del nuovo codice e della nuova funzionalità. L'ingegnere non stakeholder fornirà suggerimenti di modifica e approverà o rifiuterà la pull request.
Le pull request e la revisione del codice sono strumenti efficaci per promuovere la comunicazione passiva e la condivisione delle conoscenze in un team di progettazione. Questo aiuta a tutelarsi dal debito tecnico sotto forma di silos di conoscenze, in cui ingegneri specifici rappresentano gli unici stakeholder per determinate funzioni di una base di codice.
Ottimizzare la velocità della pipeline
Dato che la pipeline di CI sarà un processo centrale e utilizzato di frequente, è importante ottimizzarne la velocità di esecuzione. Qualsiasi piccolo ritardo nel flusso di lavoro della CI aumenterà in modo esponenziale con l'aumentare della velocità di rilascio delle funzionalità, delle dimensioni del team e della dimensione della codebase. È una buona pratica misurare la velocità della pipeline di CI e ottimizzarla secondo necessità.
Una pipeline di CI più veloce consente un ciclo di feedback sui prodotti più rapido. Gli sviluppatori possono implementare rapidamente modifiche e sperimentare nuove idee per le funzionalità per migliorare l'esperienza utente. I bug possono essere corretti e risolti rapidamente non appena individuati. Questa maggiore velocità di esecuzione può offrire sia un vantaggio rispetto ad altri concorrenti sia un'esperienza complessiva di qualità superiore ai tuoi clienti.
Guida introduttiva alla continuous integration
La dipendenza fondamentale della CI è un sistema di controllo delle versioni (VCS, Versione Control System). Se la codebase di destinazione di un'installazione di CI non dispone di un VCS, per prima cosa sarà necessario installarlo. L'assenza di un VCS dovrebbe essere molto improbabile nelle codebase moderne. Alcuni VCS popolari sono Git, Mercurial e Subversion.
Una volta impostato il controllo delle versioni, sarà necessario trovare una piattaforma di hosting per il controllo delle versioni. La maggior parte dei moderni strumenti di hosting per il controllo delle versioni dispone di supporto e funzionalità integrate per la CI. Alcune piattaforme di hosting per il controllo delle versioni più diffuse sono Bitbucket, Github e Gitlab.
Dopo aver configurato il controllo delle versioni sul progetto, sarà necessario aggiungere i passaggi di approvazione dell'integrazione. La fase di approvazione dell'integrazione più importante da implementare è costituita dai test automatizzati. L'aggiunta di test automatizzati a un progetto può avere un costo generale iniziale. È necessario installare un framework di test, quindi gli sviluppatori dovranno scrivere codice di test e test case.
Alcune idee per altri meccanismi di approvazione di CI meno costosi da aggiungere sono correttori della sintassi, formattatori di stili di codice o scansioni delle vulnerabilità delle dipendenze. Una volta impostato un sistema di controllo delle versioni con alcuni passaggi di approvazione del merge, avrai implementato la continuous integration!
La CI non è un processo aziendale puramente correlato alla progettazione. Anche il resto dei team dell'organizzazione, dal marketing, alle vendite, fino ai team di prodotto, trarranno vantaggio da una pipeline di CI. I team di prodotto dovranno pensare a come abbinare in parallelo l'esecuzione di flussi di sviluppo simultanei. I team di prodotto e progettazione lavoreranno a stretto contatto per determinare le aspettative delle funzionalità aziendali idonee che costituiranno la suite di test automatizzati.
I team di marketing e vendite potranno fare riferimento alla pipeline di CI per coordinarsi con le iniziative e gli eventi di comunicazione rivolti ai clienti. La CI offre un livello di trasparenza al resto dell'organizzazione sull'avanzamento delle fasi di progettazione. Questa utilità per la trasparenza e la comunicazione si integra perfettamente con un flusso di lavoro agile per lo sviluppo di progetti.
In conclusione...
Se la tua organizzazione si impegna per sfruttare i vantaggi di un approccio DevOps o ha semplicemente un team software con più sviluppatori, la CI svolge un ruolo molto importante. Aiuterà la tua organizzazione di progettazione a funzionare in modo più rapido ed efficace.
La CI è uno standard delle moderne organizzazioni di sviluppo software ad alta efficienza. Le migliori aziende vantano solide pipeline di CI e non ci pensano due volte a ulteriori investimenti in efficienza. I vantaggi della CI non si limitano al team di progettazione e si applicano a tutta l'organizzazione.
Esistono molti strumenti di terze parti per facilitare la gestione e l'installazione della CI. Alcune opzioni popolari sono Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCi, Jenkins, Bamboo, Teamcity e molte altre. Questi strumenti dispongono di guide di configurazione e documentazione approfondite per aiutarti a iniziare.
Prova alcuni dei migliori strumenti di CI forniti da Atlassian:
Bitbucket Pipelines è un'ottima soluzione per mantenere i progetti aggiornati con le moderne funzionalità di CI.
Jira è uno degli strumenti di gestione dei progetti Agile e DevOps più diffusi al mondo. Si integra perfettamente con altri progetti Bitbucket e, se abbinato a una pipeline di CI, può fornire una visione molto trasparente dello stato esecutivo di un'organizzazione.
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.