DevOps: tutto ciò che le aziende devono sapere

In un mondo nel quale l’innovazione procede a ritmi sempre più accelerati, anche lo sviluppo software cerca nuovi modi per offrire applicazioni di qualità in modo rapido ed efficiente.

DevOps è emerso come un vero e proprio approccio trasformativo che colma il divario tra sviluppo e operation. Questo consente alle organizzazioni di adottare una cultura del miglioramento continuo, la sola in grado di tenere il passo con il ritmo accelerato dei cicli di innovazione.

Cercheremo di seguito di capire di cosa si tratta, quali sono i benefici e come adottare DevOps all’interno della propria organizzazione.

DevOps

DevOps rappresenta un insieme flessibile di pratiche di sviluppo software che le organizzazioni utilizzano, allineando e coordinando le attività di due team principali: lo sviluppo (o “Dev”) e le operation IT (“Ops”).

Per comprendere facilmente quale sia il tratto distintivo di DevOps, è utile visualizzarlo come un ciclo continuo. Le attività nello sviluppo e nelle operation si integrano in un flusso ininterrotto che include le fasi di build, test e monitoraggio di applicazioni e servizi.

La metodologia DevOps incarna un cambiamento culturale che richiede visione, pianificazione, approvazione esecutiva. Inoltre è necessaria una stretta collaborazione per stabilire con successo un modo integrato di sviluppare e distribuire le applicazioni.

Si parla di un cambiamento culturale, perché. Attraverso DevOps i team non solo possono migliorare la loro efficienza, ma soprattutto sono in grado di sviluppare una comprensione più profonda dei loro flussi di lavoro, degli strumenti e dei processi necessari per rilasciare software migliore più rapidamente.

Le pratiche che costituiscono un approccio DevOps includono due parti.

L’integrazione continua (Continuous Integration), che permette agli sviluppatori di eseguire il commit del loro codice in un repository condiviso.

La consegna continua (Continuous Delivery), che prende gli artefatti (vale a dire i sottoprodotti realizzati durante lo sviluppo software) e li distribuisce in più ambienti con diversi criteri di test e assicurazione della qualità.

Il testing continuo (Continuous Testing) valuta la qualità del software in ogni fase del ciclo di vita della consegna. Idealmente utilizzando l’automazione per identificare codice di scarsa qualità e fornire un feedback rapido e continuo ai team di sviluppo.

Centrale è poi l’osservabilità. Fondamentale per comprendere la fattibilità del codice man mano che procede attraverso la pipeline, fornendo intuizioni sulla dinamica del software al momento del rilascio.

Così come la sicurezza continua, basata su test, monitoraggio, autorizzazione e tracciamento, che copre l’intero ciclo di vita dello sviluppo del software.

Infine, la collaborazione tra team è fondamentale per garantire l’unificazione attraverso la pipeline DevOps. Permette di stabilire una singola fonte di verità creando un continuo feedback loop tra i team.

Vediamo dunque come si articolano le diverse fasi del ciclo continuo DevOps.

Questa fase serve, come si può facilmente intuire, a pianificare il ciclo di vita del progetto.

Ed è già da questa fase si imposta il carattere iterativo del progetto stesso. Ogni fase potrà essere ripetuta in base alle necessità e soprattutto tenendo conto sin dall’inizio sia della probabilità di future iterazioni e sia della necessità di tenere traccia delle versioni precedenti.

I team avranno a disposizione le informazioni relative alle iterazioni passate che costituiranno la base per la successiva iterazione. L’iterazione più recente rappresenta la struttura informativa di partenza per quella che seguirà.

In questa fase è necessario o per lo meno auspicabile il coinvolgimento di tutti i team. Questo assicura che nessun aspetto della pianificazione venga ignorato o dimenticato.

Durante la fase di codifica, gli sviluppatori sono impegnati nella scrittura del codice e nella sua preparazione per la fase successiva.

Naturalmente, il codice viene scritto in conformità con le specifiche delineate nella fase di pianificazione e in linea con gli obiettivi anche operativi del progetto stesso.

Nella fase di Costruzione, il processo DevOps entra veramente nel vivo.

Quando uno sviluppatore completa un compito, invia il proprio codice a un repository condiviso.
Questo passaggio avviene tipicamente attraverso una pull request. Una richiesta al sistema di unire il nuovo codice al codice base condiviso, che viene poi esaminata da un altro sviluppatore.

Una volta verificato che non ci siano problemi, la pull request viene approvata. Questa revisione manuale, benché rapida, è efficace nell’identificare precocemente i problemi.

Contemporaneamente, la pull request innesca un processo automatizzato che compila il codice base ed esegue una serie di test end-to-end per individuare eventuali regressioni.

Se la compilazione o uno dei test fallisce, la pull request non va a buon fine e lo sviluppatore viene incaricato di risolvere il problema.

Controllando continuamente i cambiamenti del codice in un repository condiviso e eseguendo compilazioni e test, si minimizzano i problemi di integrazione derivanti dal lavoro su un codice base condiviso e si evidenziano i bug critici sin nelle prime fasi del ciclo di sviluppo.

Quando la fase di compilazione va a buon fine, questa viene automaticamente distribuita in un ambiente di staging per test approfonditi e specifici.

Questo ambiente può essere un servizio di hosting esistente o uno nuovo creato appositamente per il processo di distribuzione.

La pratica di configurare automaticamente un nuovo ambiente al momento della distribuzione è nota come Infrastructure-as-Code (IaC) ed è un elemento fondamentale di molti processi DevOps.

Una volta che l’applicazione è stata distribuita nell’ambiente di test, si eseguono vari test manuali e automatizzati.

I test manuali possono includere i tradizionali test di accettazione utente (User Acceptance Testing), in cui le persone utilizzano l’applicazione come farebbe un cliente, per individuare eventuali problemi o miglioramenti da apportare prima della messa in produzione.

Parallelamente, possono essere eseguiti test automatizzati per verificare la sicurezza dell’applicazione, controllare modifiche all’infrastruttura, assicurarsi che sia conforme alle migliori pratiche di sicurezza, testare le prestazioni dell’applicazione o effettuare test di carico.

I test effettuati in questa fase dipendono dall’organizzazione e dall’applicazione, ma questa tappa può essere vista come un banco di prova che permette di integrare nuovi test senza interrompere il lavoro degli sviluppatori o impattare l’ambiente di produzione.

La fase di rilascio rappresenta un traguardo fondamentale nel processo DevOps: è il momento in cui si dichiara che una build è pronta per essere distribuita nell’ambiente di produzione.

A questo punto, ogni modifica al codice ha superato una serie di test manuali e automatizzati, permettendo al team operation di essere fiducioso rispetto al fatto che problemi realmente gravi siano improbabili.

A seconda della maturità DevOps di un’organizzazione, questa potrebbe scegliere di distribuire automaticamente qualsiasi build che raggiunga questa fase del processo.

Gli sviluppatori possono utilizzare le feature flags per disattivare le nuove funzionalità in modo che non siano visibili ai clienti fino a quando non sono pronte per essere lanciate.

Questo modello è considerato l’ideale di DevOps e permette alle organizzazioni di effettuare più rilasci dei loro prodotti ogni giorno.

In alternativa, un’organizzazione potrebbe preferire di mantenere il controllo rispetto al momento in cui le build vengono rilasciate in produzione.

Potrebbe voler stabilire un calendario regolare di rilascio o rilasciare nuove funzionalità solo una volta raggiunto un determinato traguardo.

È possibile aggiungere un processo di approvazione manuale nella fase di rilascio che consente solo a determinate persone all’interno dell’organizzazione di autorizzare un rilascio in produzione.

Durante la fase di Distribuzione, una build è finalmente pronta per essere lanciata nell’ambiente di produzione.

Esistono vari strumenti e processi che possono automatizzare il processo di rilascio, rendendo i rilasci affidabili e senza necessità di periodi di inattività.

La stessa infrastruttura codificata (Infrastructure-as-Code) utilizzata per costruire l’ambiente di test può essere configurata per preparare l’ambiente di produzione.

Un rilascio blue-green consente di passare al nuovo ambiente di produzione senza interruzioni. Mentre il nuovo ambiente viene costruito, si posiziona accanto all’ambiente di produzione esistente.

Quando il nuovo ambiente è pronto, il servizio di hosting inizia a indirizzare tutte le nuove richieste verso di esso.

Se in qualsiasi momento si rileva un problema con la nuova build, è possibile semplicemente indicare al servizio di hosting di reindirizzare le richieste verso l’ambiente vecchio mentre si elabora una soluzione.

Una volta che la nuova release è attiva, spetta al team operation assicurarsi che tutto funzioni senza intoppi.

In base alla configurazione del servizio di hosting, l’ambiente si scala automaticamente con il carico per gestire i picchi e i cali nel numero di utenti attivi.

È necessario fornire agli utenti strumenti di feedback, necessari per definire lo sviluppo futuro del prodotto.

La fase “finale” del ciclo DevOps consiste nel monitorare l’ambiente.

Questo si basa sul feedback dei clienti fornito nella fase precedente, raccogliendo dati e fornendo analisi sul comportamento dei clienti, prestazioni, errori e altro ancora.

È possibile monitorare lo stesso ciclo DevOps, osservando i potenziali colli di bottiglia che causano frustrazione o impattano sulla produttività dei team.

Tutte queste informazioni vengono poi fornite al Product Manager e al team di sviluppo per chiudere il ciclo del processo.

Ma quali sono effettivamente i vantaggi che l’adozione di un approccio DevOps al software rappresenta per una organizzazione aziendale?

Proviamo a riassumerli in pochi punti.

  • Eliminazione dei silos: unendo i team di sviluppo e operation consente di superare la frammentazione e le barriere comunicative, promuovendo la collaborazione su obiettivi comuni. Per altro, l’adozione di una cultura DevOps crea un ambiente di lavoro più piacevole, promuovendo trasparenza, collaborazione e rispetto, e mantenendo alta la morale del team.
  • Accelerazione del time-to-market: la cultura DevOps aumenta l’agilità e l’efficienza, rimuovendo ostacoli come conflitti interni e malfunzionamenti nei cicli di feedback, e utilizzando strumenti di automazione per ottimizzare i processi.
    Le pratiche centrali del DevOps (Continuous Integration e Condinuous Delivery) consentono di rilevare e correggere rapidamente errori e conflitti di codice e di distribuire nuove funzionalità più rapidamente.
  • Miglioramento della user experience: il modello DevOps si basa sul feedback di team, clienti, utenti e stakeholder, consentendo alle organizzazioni di rispondere rapidamente alle aspettative.
  • Stimolo all’innovazione: DevOps stimola l’innovazione sfruttando l’esperienza individuale, i dati di ricerca e l’automazione dei processi, permettendo agli sviluppatori di sperimentare liberamente con nuove funzionalità.
  • Maggiore sicurezza: l’approccio DevSecOps integra la sicurezza in tutto il ciclo DevOps, aumentando la velocità di recupero dagli incidenti e consentendo di rilevare e correggere immediatamente le vulnerabilità.
  • Riduzione dei costi: DevOps aiuta a ridurre i costi eliminando i tempi di inattività e riducendo i costi di rilascio del software attraverso l’automazione, oltre a ridurre le spese operative grazie alle tecnologie cloud.

Come inizialmente accennato, DevOps rappresenta non solo un metodo per lo sviluppo software, ma una vera e propria filosofia incentrata sul miglioramento continuo che permea l’intera cultura aziendale instaurando una cultura di collaborazione, cooperazione e miglioramento continuo lungo tutto il ciclo di vita del software.

Attraverso l’automazione di compiti ripetitivi, la promozione della collaborazione tra team e il miglioramento della visibilità dei processi, DevOps apporta numerosi benefici.

Sebbene la sua implementazione possa presentare delle sfide, si rivela una strategia ideale per accelerare il rilascio del software, migliorandone al contempo qualità e sicurezza, e massimizzando la soddisfazione dell’utente.

Le aziende che scelgono di adottare DevOps si dotano di strumenti che consentono loro di rispondere alle mutevoli esigenze dei clienti e mantenere la competitività in un mercato in costante evoluzione.

Dalle piccole startup alle grandi imprese la cultura DevOps è ormai pervasiva.

Cerchiamo di capire quali sono le caratteristiche distintive che decretano il successo di un approccio DevOps.

  • In primis il rispetto della cultura organizzativa: DevOps rappresenta un cambiamento radicale nel funzionamento dell’organizzazione promuovendo una cultura collaborativa e rispettosa attraverso tutta l’organizzazione IT, con i team di Sviluppo (Dev) e Operazioni (Ops) che collaborano produttivamente insieme.
  • Step by step: adottare una metodologia DevOps può avvenire anche per piccoli passi, con deployment più semplici e frequenti. Questo consente di eliminare le naturali resistenze al cambiamento. Inoltre, partire da deployment più piccoli facilita le attività di testing e riduce i rischi.
  • Automazione e orchestrazione: poiché DevOps parte con l’eliminazione dei silos, aiuta anche a evitare di crearne di nuovi, promuovendo sia attività di orchestrazione tra domini sia l’automazione. Questo consente di ridurre la complessità di gestione e la duplicazione funzionale.

Va detto che le caratteristiche chiave del DevOps non sono prescrittive su come debba essere praticato, tuttavia, i team utilizzano un insieme condiviso di strumenti DevOps per aiutare a semplificare e ottimizzare i processi collaborativi.

In particolare, i container sono particolarmente adatti a DevOps e all’architettura basata sui microservizi, rendendo il software più portatile e semplice da distribuire.

Tra gli strumenti open source, Kubernetes, essendo lo standard de facto per l’orchestrazione dei container, rende possibile distribuire e gestire applicazioni complesse con alti livelli di stabilità e affidabilità, raggruppando servizi virtuali o fisici.

Adottare un approccio DevOps presenta comunque numerose sfide, che devono essere affrontate adeguatamente.

Dal punto di vista meramente tecnologico, è fondamentale saper bilanciare la maggiore velocità dei rilasci con la necessità di mantenere stabilità e affidabilità del sistema, adottando una cultura di test e monitoraggio continui.

Per questo, è fondamentale scegliere e adottare gli strumenti giusti nel processo di sviluppo e distribuzione, adottando una toolchain di DevOps integrata che supporti l’intero processo.

Fondamentale è poi assicurarsi che gli ambienti siano sincronizzati e che i cambiamenti del codice siano adeguatamente testati prima di essere promossi in produzione, adottando un approccio di integrazione e distribuzione continui (CI/CD).

Dal punto di vista organizzativo, l’ostacolo maggiore può essere rappresentato dalla mancanza di team multifunzionali con le competenze necessarie. In questo caso è importante prevedere percorsi di formazione interni all’azienda.

Analogamente, è necessario trovare il giusto equilibrio tra controllo e flessibilità. Questo è possibile adottando un approccio di governance flessibile e agile che supporti il processo di sviluppo e distribuzione.

Anche se non esiste una roadmap univoca per l’implementazione di una strategia DevOps, ci sono alcuni passaggi fondamentali che non possono essere tralasciati.

Il primo è il coinvolgimento di diverse funzioni aziendali, non solo l’IT.

Dal momento che si tratta di una strategia non solo innovativa, ma trasformativa, è importante che vi sia un allineamento anche di altre funzioni, come le risorse umane o la direzione finanziaria, perché riceva il giusto supporto.

Serve poi che i responsabili del programma allineino i team in un ambiente condiviso, stabilendo un obiettivo comune, così che ciascun membro ne sia coinvolto e si senta responsabilizzato rispetto al successo del progetto.

Soprattutto, è fondamentale capire che DevOps è parte integrante di una metodologia agile ed è uno strumento chiave per rilasciare il software più velocemente e, cosa ancora più importante, a mantenerlo operativo senza interruzioni a costi inferiori.

Per questo implica la creazione di una pipeline di Continuous Integration /Continuous Delivery utilizzando i giusti strumenti di automazione e favorendo una stretta collaborazione tra i membri del team di sviluppo.