Dalla cascata al ciclo continuo: il passaggio al DevOps dal modello tradizionale di progettazione e rilascio software comporta un cambiamento culturale.
Anziché procedere in modo sequenziale, ovvero prima con lo sviluppo e poi con l’esecuzione, le piattaforme DevOps supportano la collaborazione, l’implementazione, il miglioramento e il monitoraggio continui. Se strutturato sulla base delle esigenze aziendali, il DevOps consente un’integrazione delle diverse fasi del ciclo di vita del prodotto, una maggiore aderenza alla domanda di mercato e un’accelerazione nel time to market.
Cos’è il DevOps
“DevOps” è una metodologia che ridefinisce le procedure di gestione del ciclo di vita del software. Come suggerisce il termine stesso, mette insieme lo sviluppo (Development) e le operazioni di esecuzione e distribuzione (Operations).
Due aree che nel modello tradizionale, “a cascata”, vengono considerate in sequenza: a monte l’analisi e la progettazione, a valle l’esecuzione, il test e il rilascio del prodotto. Un modello lineare, a compartimenti stagni, che spesso non riesce a rispondere con adeguata tempestività alle esigenze del mercato, che siano di distribuzione, modifica o implementazione del software.
Il DevOps, al contrario, riorganizza le diverse attività in un ciclo di miglioramento continuo, che, attraverso elementi di lean management e metodologia agile, ha l’obiettivo di rispondere in modo più veloce e puntuale ai feedback che arrivano dai clienti e dal mercato.
Il concetto di “DevOps” è emerso per la prima volta nel giugno 2009 con John Allspaw e Paul Hammond, rispettivamente vicepresidente senior delle operazioni tecniche e direttore della progettazione di Flickr. Durante la presentazione “10+ Deploys per Day: Dev and Ops Cooperation at Flickr”, Allspaw e Hammond dimostrarono la necessità di un’integrazione continua tra lo sviluppo e le operazioni di rilascio e distribuzione del software.
Video
Il termine “DevOps” è stato invece coniato dal project manager Patrick Debois, che a novembre dello stesso anno ha organizzato a Gand, in Belgio, il primo dei “DevOps Days”, oggi la serie di conferenze sull’argomento più diffusa al mondo.
Esempi di DevOps
Le piattaforme di DevOps, che includono strumenti di automazione, abilitano in parallelo diverse pratiche.
Integrazione continua (Continuous Integration)
L’integrazione continua include sia la modifica del codice più volte al giorno sia l’inserimento dei relativi test in automatico ad ogni modifica. Le modifiche continue sono abilitate da un repository condiviso, i test da un sistema di automazione del build. Il build è la sequenza di compilazione e collegamento, ovvero la trasformazione del codice sorgente in codice oggetto e la combinazione del codice oggetto con le librerie per eseguire il programma.
L’integrazione delle modifiche e dei test consente di rilevare eventuali problemi in tempi rapidi e affinare progressivamente lo sviluppo sulla base dei risultati ottenuti.
Consegna Continua (Continuous Delivery)
La consegna continua è una conseguenza dell’integrazione continua: il sistema automatico di build abilita il software, testato ripetutamente, ad essere rilasciato e prodotto in qualsiasi momento. La configurazione delle infrastrutture software viene definita in modo standard e, anche in questo caso, i dettagli vengono gestiti in modo integrato, con test continui e automatici.
Distribuzione Continua (Continuous Deployment)
La distribuzione continua è un’ulteriore automazione: le modifiche che vengono approvate dal sistema di test arrivano direttamente in produzione.
Esecuzione continua (Continuous Operations)
L’esecuzione continua è la gestione delle modifiche e degli aggiornamenti, nonché della manutenzione, attraverso la parallelizzazione delle versioni. Solo dopo aver testato e implementato la versione successiva si sostituisce la precedente, evitando disservizi all’utente.
Monitoraggio continuo (Continuous Monitoring o Assessment)
Il monitoraggio continuo è garantito dall’infrastruttura che supporta il codice e dalla gestione dei feedback che arrivano dagli utenti e dal mercato: la registrazione della user experience in tutto il ciclo di vita del prodotto, la definizione delle priorità in base alle esigenze di business, la pianificazione degli investimenti necessari a rispondere alla domanda.
Infrastruttura come codice (Infrastructure as a Code)
Per accelerare la consegna e automatizzare la configurazione dell’infrastruttura IT (provisioning), è possibile aggiungerne il “codice” dagli strumenti di sviluppo devOps.
Vantaggi del DevOps
Il DevOps è pensato per promuovere la collaborazione tra i team di sviluppo e i team delle operations, supportare il miglioramento continuo dei processi evitando gli sprechi, aumentare la velocità, la sicurezza e la qualità del ciclo di vita del prodotto, migliorare la user experience.
Velocità
Il DevOps comporta l’automazione di processi altrimenti manuali come l’aggiornamento di codice, nonché la possibilità di effettuare test continui su piccole quantità di codice. Consente una delivery più rapida ed efficiente, accelerando sia i tempi di sviluppo che di rilascio (time to market), riducendo i rischi e i tempi medi di ripristino.
Qualità
Il DevOps incorpora automaticamente nel processo elevati standard qualitativi, incentivando la trasparenza e la condivisione di informazioni. I test continui garantiscono una migliore stabilità del prodotto e la gestione dei feedback migliora l’esperienza dell’utente.
Sicurezza
Il tempo liberato attraverso il DevOps può essere impiegato per aumentare la sicurezza del prodotto: le piattaforme abilitano audit, analisi rapide e compliance automatizzate nelle diverse fasi del ciclo di vita.
I tools DevOps più diffusi
Di seguito alcuni dei tool DevOps maggiormente utilizzati.
Tool DevOps di controllo di versione
Git è il software opensource per il controllo di versione distribuito creato da Linus Torvalds nel 2005. Su Git si basa la piattaforma GitHub, che include le GitHub Actions. Le GitHub Actions sono file YAML ospitati nei repository GitHub che permettono ai pacchetti software di accettare input e attivare processi, così da automatizzare revisioni di codice e altri processi DevOps. Su Git si basano Cloud Source Repository di Google, Bitbucket di Atlassian, Visual Studio Team Services di Microsoft Azure, CodeCommit di AWS. Altri tool devOps diffusi di controllo di versione sono SVN e Mercurial.
Tool DevOps per l’integrazione continua
Molto diffuso Jenkins, server di automazione opensource con plugin per la costruzione, il deployment e il test di progetti software. Altri tool di CI sono Travis CI, Circle CI, Integrity, Nolio, Bamboo.
Tool DevOps di gestione della configurazione/Infrastructure as a code
Si distinguono Ansible, Puppet, Chef, Kubernetes e Docker. Ansible è il progetto open source di Red Hat, che consente di scrivere l’infrastruttura in un documento di testo e organizzare gli stati desiderati in un playbook. Puppet è un’app multipiattaforma in due versioni, opensource e commerciale. Utilizza un approccio dichiarativo nella configurazione, attraverso file chiamati “manifesti” che contengono le istruzioni per il server da controllare. In Chef i file in formato dichiarativo sono chiamati “ricette”, raggruppati in “libri di cucina”. Kubernetes gestisce i container, gli oggetti che raggruppano tutto ciò che serve alle applicazioni, automatizzandone la manutenzione e lo scaling. Docker è un software open source che costruisce, spedisce ed esegue app come un container. Altri tool sono OpenShift. OpenStack, Terraform, CloudFormation, Habitat.
Tool DevOps di monitoraggio continuo
Diffusi Prometheus e ELK Stack. Prometheus è una piattaforma di monitoraggio open source che raccoglie metriche di serie temporali attraverso il web scraping e ha un sistema di interazione e visualizzazione di questi dati con un alert manager per gestire gli avvisi. ELK Stack è l’unione di tre progetti open source promossi da Elastic: Elasticsearch, Logstash e Kibana. Elasticsearch è un motore di ricerca e analisi dati distribuito; Logstash uno strumento di importazione, trasformazione e invio dati; Kibana uno strumento di visualizzazione ed esplorazione. ELK consente quindi la registrazione dei dati da qualsiasi fonte, l’elaborazione, l’analisi e la visualizzazione rapida. Altri tool sono Datadog, JUnit, Codeception, BlazeMeter, Raygun.
Tool DevOps in cloud
Tra le piattaforme più diffuse, Microsoft Azure DevOps Services, AWS DevOps, Oracle Cloud for DevOps, Atlassian Open DevOps, DevOps Services on IBM Cloud.