I benefici dell’approccio CI/CD per rispondere tempestivamente alle richieste del mercato

Il mercato richiede servizi sempre più innovativi ad una velocità sempre crescente.

I clienti finali desiderano l’eccellenza del servizio e sono sempre meno disposti ad accettarne downtime o imperfezioni.

Una metodologia di sviluppo e di erogazione dei servizi in grado di adattarsi velocemente alle richieste del mercato si rende quindi indispensabile. Diventa quindi un must portare in produzione nuove funzionalità e sistemare i problemi che inevitabilmente si presentano seguendo esclusivamente i tempi rapidi scanditi dal mercato e non in tempi lunghi scanditi da scelte aziendali.

Nel passato l’attività di creare un’applicazione eseguibile a partire dal codice e quella di erogazione del servizio associato erano svolte da team differenti che ne avevano le rispettive responsabilità. Questa modalità di messa in produzione molto spesso si è rivelata macchinosa, di difficile gestione e di arduo troubleshooting in caso di problematiche. Inoltre, questo processo era responsabile di una serie di lungaggini operative determinate da interazioni inefficaci tra i team che rallentavano il time-to-market.

La CI/CD (Continuous Integration / Continuous Delivery o Deployment) rappresenta un insieme di pratiche per lo sviluppo software e di delivery, che rende possibile integrare frequentemente gli applicativi scritti da diversi componenti di un gruppo e rilasciarlo in produzione. I benefici ottenuti da questa pratica sono di svincolare gli sviluppatori da gran parte delle attività ripetitive, onerose in termini di tempo, grazie all’automazione, e di ridurre il rischio dovuto ad errore umano.

Con la CI gli sviluppatori condividono lo stesso codice sorgente sul quale integrano i differenti sviluppi. Gli errori dovuti all’integrazione sono limitati perché tutti gli sviluppi vengono integrati diverse volte al giorno, e vengono testati ogni volta.

Ingrediente necessario per una buona progettazione di una CI, è che il codice sorgente sia depositato su un repository centrale gestito da un sistema di controllo di versione in grado di semplificare la collaborazione fra i diversi sviluppatori.

Altri due ingredienti fondamentali sono la condivisione di una procedura di build comune fra tutti gli sviluppatori e l’utilizzo esteso di test automatici. In questo modo ogni sviluppatore, quando recepisce le modifiche fatte da altri, è in grado di stabilire quanto il proprio lavoro sia compatibile col codice presente nel repository centrale.

Una volta che il codice è stato sviluppato, è necessario svolgere una serie di operazioni volte ad erogarlo in un ambiente di produzione o in un ambiente non di produzione.

La Continuous Delivery è un insieme di pratiche che rendono possibile automatizzare tutte le procedure necessarie per la creazione di un pacchetto pronto per essere rilasciato. Spesso la Continuous Delivery si occupa di erogare il servizio su ambienti meno privilegiati, come ambienti di test o di collaudo. Con il Continuous Deployment è invece possibile portare un’applicazione direttamente in produzione in tempi rapidi.

Per una buona progettazione della CD, è fondamentale avvalersi dell’utilizzo di test automatici in grado di verificare il comportamento dell’applicazione prima che questa venga erogata in produzione. È inoltre indispensabile avere una procedura per cui il codice viene portato in ambiente di produzione solo quando le necessarie autorizzazioni sono state ottenute.

In conclusione, la Continuous Integration dà quindi un notevole controllo agli sviluppatori rendendoli in grado di poter autonomamente rispondere alle richieste del business in breve tempo minimizzando le inefficienze dovute alla necessità di lavorare in più persone sullo stesso codice. La Continuous Delivery, e il Continuous Deployment, rendono possibile automatizzare gran parte del lavoro necessario per il rilascio in produzione lasciando agli sviluppatori la possibilità di concentrarsi sullo sviluppo, vale a dire il core business di un’azienda.

 

Luca Barzè – Solutions Architect