Cos'è CI/CD? Integrazione continua e distribuzione continua
Che cos'è l'integrazione continua (CI)?
Integrazione continua è un metodo di sviluppo software in cui i membri del team integrano il proprio lavoro almeno una volta al giorno. In questo metodo, ogni integrazione viene controllata da una build automatizzata per rilevare errori. Questo concetto è stato introdotto per la prima volta più di vent’anni fa per evitare l’“inferno dell’integrazione”, che si verifica quando l’integrazione viene rimandata alla fine di un progetto.
Nell'integrazione continua, dopo un commit del codice, il software viene creato e testato immediatamente. In un progetto di grandi dimensioni con molti sviluppatori, i commit vengono effettuati più volte durante la giornata. Con ogni commit il codice viene creato e testato. Se il test viene superato, la build viene testata per la distribuzione. Se la distribuzione ha esito positivo, il codice viene inviato alla produzione. Il commit, la creazione, il test e la distribuzione sono un processo continuo, da cui il nome integrazione/distribuzione continua.
Che cos'è la consegna continua (CD)?
Consegna continua è un metodo di ingegneria del software in cui un team sviluppa prodotti software in un ciclo breve. Garantisce che il software possa essere rilasciato facilmente in qualsiasi momento. L'obiettivo principale della consegna continua è di creare, testare e rilasciare software con una buona velocità e frequenza. Ti aiuta a ridurre i costi, i tempi e i rischi di consegna delle modifiche consentendo aggiornamenti frequenti in produzione.
Qual è la differenza tra CI e CD?
Sviluppo senza CI vs. Sviluppo con CI
Ecco le differenze principali tra lo sviluppo tramite CI o senza CI:
| Sviluppo senza CI | Sviluppo con CI |
|---|---|
| Un sacco di bug | Meno bug |
| Commit poco frequenti | Impegni regolari |
| Rilasci poco frequenti e lenti | Rilasci lavorativi regolari |
| Integrazione difficile | Integrazione semplice ed efficace |
| I test avvengono tardi | I test di integrazione continua vengono eseguiti presto e spesso. |
| I problemi sollevati sono più difficili da risolvere | Individua e risolvi i problemi in modo più rapido ed efficiente. |
| Scarsa visibilità del progetto | Migliore visibilità del progetto |
Differenza tra compilazione e integrazione continua

Mentre la compilazione compila solo un codice, la CI esegue le seguenti attività
Integrazione del database
- Assicurare che DB e codice siano sincronizzati
- Creazione automatizzata di DB e dati di test.
Code Ispezione
- Garantisce una base di codice sana
- Identifica tempestivamente i problemi e applica le migliori pratiche
Distribuzione automatizzata
- Ti consente di rilasciare il prodotto in qualsiasi momento
- Stato continuamente dimostrabile e funziona su qualsiasi macchina
Generazione di documenti
- Assicurarsi che la documentazione sia aggiornata
- Rimuove bruciato dallo sviluppatore
- Produce report e metriche di compilazione
compilazione
La compilazione è il processo utilizzato dal computer per convertire il codice di un linguaggio di programmazione di alto livello in un linguaggio macchina che il computer è in grado di comprendere. Garantisce un compilatore di codice su ogni piattaforma di destinazione.
Quando costruisco?
- Ad ogni check-in
- Ogni volta che cambia una dipendenza
Quali passaggi sono presenti nell'integrazione continua?

- Idealmente, la compilazione dovrebbe provenire dalla riga di comando e non dovrebbe dipendere da un ambiente di sviluppo integrato (IDE).
- La compilazione dovrebbe avvenire in modo continuo utilizzando un server Cl dedicato, non un lavoro cron.
- La CI creata dovrebbe essere attivata ad ogni check-in e non solo a mezzanotte
- La build dovrebbe fornire un feedback immediato e non richiedere alcuno sforzo da parte dello sviluppatore
- Identificare le metriche chiave e tracIdentificali visivamente. Ancora più importante, agisci immediatamente.
Di cosa hai bisogno per condurre il processo CI?
Ecco gli elementi chiave necessari per eseguire l'intero processo CI:
- Sistema di controllo della versione (VCS): Offre un metodo affidabile per centralizzare e preservare le modifiche apportate al progetto nel tempo.
- Macchina virtuale: Dovresti avere un server di riserva o almeno uno macchina virtuale per costruire il tuo sistema.
- Soluzioni di strumenti CI ospitati: Per evitare server o macchine virtuali, dovresti optare per soluzioni di strumenti CI ospitati. Questo strumento aiuta nella manutenzione dell'intero processo e offre una scalabilità più semplice.
- Strumenti: Se selezioni una variante self-hosted, dovrai installarne una delle tante Strumenti CI come Jenkins, TeamCity, Bamboo, GitLab, ecc.
Come funziona l'integrazione continua?
Sicuramente conosci il vecchio telefono Nokia. Nokia implementava una procedura chiamata nightly build. Dopo molteplici commit da parte di diversi sviluppatori durante il giorno, il software veniva creato ogni notte. Dato che il software veniva creato solo una volta al giorno, isolare, identificare e correggere gli errori in una codebase di grandi dimensioni è estremamente complicato.
Later, hanno adottato l'approccio dell'integrazione continua. Il software è stato creato e testato non appena uno sviluppatore ha inviato il codice. Se viene rilevato un errore, il rispettivo sviluppatore può correggere rapidamente il difetto.

Caratteristiche di CI
Ecco le caratteristiche e i vantaggi importanti dell'integrazione continua:
- Ti consente di mantenere un solo repository di origine
- È possibile testare il clone dell'ambiente CI di produzione
- L’ambiente costruito dovrebbe essere vicino all’ambiente di produzione.
- Uno dei vantaggi dell'integrazione continua è la disponibilità costante della build corrente
- Il processo completo di creazione, test e distribuzione dovrebbe essere visibile a tutti i detentori dello stack.
Perché utilizzare la CI?
Ecco alcuni motivi importanti per utilizzare l'integrazione continua:
- Ti aiuta a creare software di migliore qualità
- Il processo CI aiuta ad aumentare l'organico e la produzione dei team di ingegneri.
- La CI consente agli sviluppatori di software di lavorare indipendentemente sulle funzionalità in parallelo.
- Ti aiuta a condurre test ripetibili
- Aumentare la visibilità consentendo una maggiore comunicazione
- Aiuta a sviluppare un prodotto potenzialmente spedibile per la creazione completamente automatizzata
- Ti aiuta a ridurre i rischi rendendo la distribuzione più rapida e prevedibile
- feedback immediato all'arrivo del problema
- Evita la confusione dell'ultimo minuto sulla data e sui tempi di rilascio
migliori pratiche di utilizzo dei sistemi CI
Di seguito sono riportate alcune importanti best practice durante l'implementazione
- Impegnati presto e impegnati spesso, non impegnarti mai in modo irrevocabile. Code
- Risolvi immediatamente gli errori di compilazione
- Agisci in base alle metriche
- Integra ogni ambiente di destinazione Crea artefatti da ogni build
- La creazione del software deve essere eseguita in modo tale da poter essere automatizzata
- Non dipendere da un IDE
- Costruisci e testa tutto quando cambia
- Lo schema del database conta come tutto
- Ti aiuta a scoprire le metriche chiave e tracli vedi visivamente
- Check-in spesso e anticipato
- Controllo più efficace del codice sorgente
- L'integrazione continua esegue unit test ogni volta che si esegue il commit del codice
- Automatizza la creazione e testa tutti
- Mantieni la creazione rapida con la distribuzione automatizzata
Svantaggi dell'IC
Ecco i contro/svantaggi del processo di integrazione continua:
- Per acquisire familiarità con il server Cl sono necessari tempo di configurazione iniziale e formazione
- Lo sviluppo di procedure di prova adeguate è essenziale
- Una suite di test ben sviluppata richiedeva molte risorse per il server Cl
- Conversione di processi familiari
- Richiede server e ambienti aggiuntivi
- Possono verificarsi tempi di attesa quando più sviluppatori desiderano integrare il proprio codice nello stesso momento
Strumenti per il processo CI
Ecco alcuni degli strumenti CI/CD più essenziali:
Jenkins
Jenkins è un software di integrazione continua open source. È scritto usando il Java linguaggio di programmazione. Facilita test e reporting in tempo reale su modifiche isolate in una codebase più massiccia. Questo software aiuta gli sviluppatori a trovare e risolvere rapidamente i difetti nella loro base di codice e ad automatizzare i test delle loro build.
Bamboo
Bamboo è un server di build per l'integrazione continua che esegue build, test e rilasci automatici in un unico luogo. Funziona perfettamente con il software JIRA e Bitbucket. Bamboo supporta numerose lingue e tecnologie come CodeDeply, Docker, Git, SVN, Mercurial, AWS e Amazon Secchi S3.
TeamCity
TeamCity è un server di integrazione continua che supporta molte potenti funzionalità. Mantiene un server CI integro e stabile anche quando non sono in esecuzione build. Fornisce una migliore qualità del codice per qualsiasi progetto
Sintesi
- Definizione di integrazione continua: l'integrazione continua è un metodo di sviluppo software in cui i membri del team possono integrare il proprio lavoro almeno una volta al giorno
- CI/CD significa combinazione di integrazione continua e distribuzione continua o distribuzione continua.
- Lo sviluppo senza CI crea molti bug mentre lo sviluppo con CI offre meno bug
- Le attività importanti dell'integrazione continua sono 1) l'integrazione del DB, 2) Code Ispezione, 3) Distribuzione automatizzata, generazione di documenti e compilazione.
- La compilazione dovrebbe avvenire in modo continuo utilizzando un server Cl dedicato, non un lavoro cron.
- Elementi importanti della CI sono 1) Sistema di controllo della versione 2) Macchina virtuale 3) Soluzioni di strumenti CI host 4) Strumenti
- Il sistema di integrazione continua consente di mantenere un solo repository di sorgenti
- Il processo CI/CD ti aiuta a creare software di migliore qualità
- Le migliori pratiche più importanti di Azure Il processo di integrazione continua consiste nell'impegnarsi presto e spesso, mai nell'impegnarsi in modo interrotto. Code
- Il principale svantaggio di Conduttura CI/CD Il processo è che una suite di test ben sviluppata richiedeva molte risorse per il server Cl
- Jenkins, Bambook e Team City sono alcuni utili AWS Continuous Strumenti di integrazione.




