Cosa è DevOps a dieci anni dalla sua nascita

Avere una IT agile ma senza rischiare l'instabilità: è la promessa del modello DevOps, grazie alla sinergia tra sviluppo e operations

Autore: f.p.

Nel 2019 l'approccio DevOps compie dieci anni. Anche se la ricorrenza, come molti anniversari nel mondo delle tecnologie, è più che altro simbolica. Secondo gli annali dell'IT il termine DevOps è stato effettivamente usato per la prima volta nel 2009, ma va ricordato che esso indica un approccio allo sviluppo e all'implementazione delle applicazioni, non una specifica tecnologia, una lista di regole ferree o un singolo strumento. DevOps non nasce dal nulla e non vive da solo. Non esisterebbe senza l'affermazione delle logiche di sviluppo Agile e non avrebbe importanza se, parallelamente alla sua nascita, non fosse stata in atto una profonda rivisitazione dello sviluppo software.

Il termine DevOps è l'acronimo di development e operations, perché in estrema sintesi l'obiettivo della metodologia è fare in modo che i team di sviluppo e quelli che si occupano del buon funzionamento dei sistemi operino in maniera sinergica e coordinata quando si tratta di portare in produzione, negli ambienti IT aziendali, nuove applicazioni o servizi. Sembra una idea banale, in realtà IT e operations una decina di anni fa vivevano spesso come separati in casa: poche interazioni, quelle poche legate a qualche problema da risolvere.

La constatazione di fondo, da cui correttamente DevOps parte, è che sviluppatori e team di operations hanno esigenze ideali contrastanti: i primi devono innovare modificando frequentemente le applicazioni e i servizi che girano sull'infrastruttura IT aziendale, i secondi vogliono che questa sia stabile per garantirne la massima operatività. È sempre stato così, i contrasti e gli attriti si sono fatti più evidenti quando ai team di sviluppo è stato chiesto di lavorare in maniera sempre più veloce.


Tra Agile e DevOps

È qui che DevOps mostra il suo legame intrinseco con i concetti precedenti di sviluppo Agile. Questi hanno giustamente portato le aziende ad abbandonare lo sviluppo tradizionale e hanno favorito l'adozione di cicli di sviluppo brevi, l'apertura al cambiamento frequente, l'attenzione al miglioramento continuo, l'importanza del feedback degli utenti finali. Ma in questa evoluzione molte aziende hanno puntato dritte sui vantaggi - più funzioni e applicazioni, più spesso - senza considerare che qualsiasi attività di sviluppo non può essere del tutto priva di vincoli.

DevOps aiuta a mettere ordine in questo scompenso, prima ancora di andare a colmare il gap tra sviluppo ed operations, con alcune linee guida per la parte di sviluppo e test. Attenzione, però: DevOps non è un "nuovo Agile". I principi dello sviluppo Agile valgono comunque, con o senza DevOps, e riguardano soprattutto il lavoro dei team di sviluppo, il concetto della qualità del software, l'attenzione al software funzionale. DevOps ha una visione più concreta, operativa e quasi "strumentale", di tutto il flusso sviluppo-implementazione-operations.

Lato sviluppo in sé, infatti, uno degli elementi chiave di DevOps è il concetto di Continuous Integration, o integrazione continua. Come teoria è uno dei principi del modello Agile: non puntare su grandi aggiornamenti applicativi che richiedono settimane o mesi ma su innovazioni incrementali molto più contenute e frequenti. Queste possono essere testate velocemente e portate in produzione quasi subito, ricevendo un feedback immediato sulla loro funzionalità reale.


Il modello DevOps porta questa visione sul piano della concretezza, indicando in che modo muoversi (ma non ci sono tavole della legge, perché non esiste "la" formalizzazione di DevOps) e spingendo per l'utilizzo di strumenti che automatizzano e controllano le varie fasi dello sviluppo. Ad esempio git e GitHub per gestire cicli di sviluppo collaborativo, non lineare e distribuito: ogni sviluppatore interviene sulla sua parte di codice, introduce le sue modifiche e resta sempre aggiornato su quelle degli altri. L'obiettivo è ridurre al minimo il rischio di produrre codice errato per un disallineamento tra i singoli sviluppatori o i gruppi di sviluppo. O che un errore si scopra tardi e per questo si debba scartare tutto un corposo aggiornamento applicativo.

Il test del nuovo codice è un altro elemento importante di DevOps. Idealmente ogni modifica alle applicazioni o ai moduli di codice deve essere testata in ambienti simili a quelli reali ma sicuri, comunque non in produzione. L'obiettivo non è solo bloccare il codice evidentemente errato ma anche valutare il suo livello di rischio: un modulo software anche funzionante e formalmente corretto potrebbe comunque introdurre vulnerabilità, a seconda delle sue possibili interazioni con altri elementi dell'ambiente di produzione.

DevOps: arriviamo alle operations

L'approccio DevOps arriva a toccare direttamente la parte delle operations portando a una formalizzazione dei passi da seguire per implementare in produzione il nuovo codice. Si suppone che la parte di Continuous Integration e testing abbia portato a codice corretto, ma questo non basta.

Uno dei principali punti di contrasto tra sviluppatori e operations è tradizionalmente lo spuntare in produzione di servizi, applicazioni e relative risorse di cui lo staff IT non sa niente o quasi. Non è una questione di shadow IT ma di stabilità stessa dei sistemi: anche nei migliori ambienti IT risorse e applicazioni devono attivarsi - a maggior ragione oggi, negli ambienti di cloud computing - in maniera sicura. Questo ovviamente contrasta con la volontà di avere il massimo di quella "agility" di cui oggi parlano tutti, ma i controlli ci vogliono.

Nel modello DevOps questo contrasto viene superato con una collaborazione fattiva tra le parti - un elemento concettuale e culturale, ma dove si trova la vera carica innovativa di DevOps - e operativamente con strumenti di Continuous Delivery e anche di Continuous Deployment.


La Continuous Delivery è il complemento della Continuous Integration: "riceve" il nuovo codice impacchettato nella maniera più opportuna (ad esempio in un container); configura, attiva e/o rilancia le risorse che lo devono eseguire; effettua altri test di funzionamento oltre a quelli degli sviluppatori; in caso di problemi ripristina tutto allo stato precedente alla ricezione del nuovo codice. Se è previsto che le modifiche passino direttamente in produzione una volta verificato il loro buon funzionamento, la Continuous Delivery diventa anche Continuous Deployment.

L'approccio DevOps prevede poi che la collaborazione tra sviluppatori e operations continui anche dopo il deployment. Controllando la corretta (o meno) esecuzione delle nuove applicazioni e dei nuovi servizi, le operations possono dare agli sviluppatori informazioni importanti per le attività successive di creazione del codice.

DevOps: a chi interessa

Nonostante il mantra secondo cui ogni azienda è (o diventerà) una software house, il dibattito inaugurato da DevOps non ha interessato tutti subito. E nemmeno, nonostante l'onnipresenza del termine, interessa tutti adesso. Però tocca potenzialmente molti.

Ottimizzare al massimo il percorso che va dalla creazione di un nuovo servizio o applicazione alla sua esecuzione e chiuderlo in un ciclo ideale interessava, dieci anni fa, i cloud provider, le aziende di fascia enterprise e i fornitori di servizi online (di qualsiasi tipo: dalle applicazioni in SaaS agli ecommerce fino ai social network). Oggi le realtà interessate sono molte di più, perché la digitalizzazione in generale ha messo un numero molto elevato di imprese nelle condizioni - e anche nella necessità - di migliorare frequentemente i "tasselli" applicativi su cui si basano i propri processi.

Quindi, tanto per fare qualche esempio, DevOps interessa i retailer che vogliono sviluppare sempre nuovi servizi digitali ai clienti per aumentarne il coinvolgimento, le banche che cercano di restare al passo con le esigenze dei clienti, le software house propriamente dette, gli operatori di telecomunicazioni che stanno "cloudificando" le loro piattaforme... In estrema sintesi, tutte le imprese che hanno scelto la digitalizzazione come modo per poter cambiare in meglio i propri processi ogni volta che è necessario.


Un dato di fatto ormai poco confutabile è che le metodologie DevOps portano vantaggi a chi le adotta. Ci sono molte analisi che hanno cercato di quantificarli, tra i vari loro risultati è interessante notare una netta accelerazione della frequenza di delivery di nuovo codice, che arriva ad essere di più volte al giorno. Non tutte le aziende hanno bisogno di operare così frequentemente, ma anche in implementazioni più conservative DevOps riduce notevolmente il tasso di errori del nuovo codice in delivery e il tempo necessario a recuperare da situazioni di errore.

DevOps: i punti deboli

Di suo, DevOps ha un solo importante punto critico, per chi lo approccia: non è una lista formalizzata e univoca di cose da fare. Il concetto di fondo è chiaro - coinvolgere sia sviluppatori sia operations in tutto il ciclo di vita di una applicazione/servizio - ma concretizzarlo oggi vuol dire mettere insieme concetti di sviluppo, test, integration, deployment, automazione, orchestration, infrastructure-as-code e via dicendo.

DevOps è quindi una di quelle discipline per cui non è praticabile l'idea di trovare il (malcapitato) "esperto" aziendale a cui affidare il compito di creare il ponte tra sviluppo e operations. Ci vuole impegno da parte di tutte le figure coinvolte e anche del management. Impegno che certamente arriva una volta quantificati i vantaggi di DevOps, ma che prima non è scontato.


La genericità di DevOps riguarda anche gli strumenti da adottare. Non esiste una piattaforma DevOps formale ma un insieme di tool mirati alle varie componenti dell'approccio - alcuni dei quali sono diventati ormai standard di mercato - e tra cui scegliere quelli più opportuni. In generale la cosiddetta DevOps toolchain può essere molto articolata, con prodotti tanto open source quanto commerciali, e nuovi moduli software interessanti in logica DevOps nascono frequentemente.

Infine, un punto critico che si constata in molti flussi DevOps è una relativa poca attenzione alle fasi di test, nella parte di integration come in quella di deployment. Questo deriva sia da una poca predisposizione "storica" delle aziende ad eseguire test estesi del codice e delle applicazioni, sia dal fatto - peraltro collegato a questa poca predisposizione - che le soluzioni di test automatizzato non si sono granché evolute negli ultimi anni. O perlomeno non quanto il resto degli ambiti toccati da DevOps.

Questo rappresenta un problema e una mancata opportunità. Il problema è che per le specifiche implementazioni di DevOps aumenta la probabilità di avere codice errato oppure applicazioni malfunzionanti, vanificando parte dei benefici stessi di DevOps. L'opportunità mancata è che inserire una mole cospicua di test e controlli di sicurezza nei flussi DevOps, spaziando dai test funzionali all'analisi delle vulnerabilità, aiuterebbe a concretizzare i principi di security by design che gli esperti richiedono. Tanto che l'idea del DevSecOps si è già abbastanza diffusa.

Visualizza la versione completa sul sito

Informativa
Questo sito o gli strumenti terzi da questo utilizzati si avvalgono di cookie necessari al funzionamento ed utili alle finalità illustrate nella cookie policy. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie, consulta la cookie policy. Chiudendo questo banner, acconsenti all’uso dei cookie.