Menu

Cos'è DevOps?

lente d'ingrandimento grigia poggiata su un lato
Argomenti

DevOps è una filosofia e un framework in evoluzione che promuove uno sviluppo applicativo migliore e più efficace e una release più rapida di prodotti o funzionalità software, nuovi o aggiornati, ai clienti.

Le pratiche di DevOps favoriscono comunicazioni, collaborazioni, integrazione, visibilità e trasparenza continue e più semplici tra i team di sviluppo delle applicazioni (Dev) e le controparti del team operativo IT (Ops).

Questa stretta relazione tra "Dev" e "Ops" permea ogni fase del ciclo di vita DevOps: dalla pianificazione iniziale del software alle fasi di codifica, creazione, test e release, fino all'implementazione, alle operazioni e al monitoraggio continuo. Inoltre, genera un ciclo continuo di attività di miglioramento, sviluppo, test e implementazione basato sul feedback dei clienti. Uno dei risultati di tali pratiche può essere la release continua e più rapida delle modifiche o delle integrazioni delle funzionalità necessarie.

Alcuni suddividono gli obiettivi di DevOps in quattro categorie, Cultura, Automazione, Misurazione e Condivisione (CAMS), ovvero tutte aree nelle quali l'utilizzo dei tool di DevOps può essere vantaggioso. Questi strumenti possono rendere i flussi di lavoro delle operazioni e dello sviluppo più semplici e collaborativi, automatizzando le attività manuali o statiche, che in precedenza richiedevano molto tempo, collegate alle fasi di integrazione, sviluppo, test, implementazione o monitoraggio.

Vantaggi della metodologia DevOps

La metodologia DevOps è fondamentale non solo perché si pone l'obiettivo di abbattere le barriere alla comunicazione e alla collaborazione tra team di sviluppo e team operativi IT, ma anche ai fini di una maggiore soddisfazione dei clienti e rapidità nell'offerta di valore. DevOps è inoltre progettato per promuovere l'innovazione del business e favorire il miglioramento continuo dei processi.

Le pratiche di DevOps incoraggiano un'offerta di valore di business più rapida, migliore e sicura ai clienti finali di un'organizzazione. Questo valore può esprimersi sotto forma di release, funzionalità o aggiornamenti dei prodotti più frequenti. Può riguardare la rapidità con cui la release di un prodotto o di una nuova funzionalità diventa accessibile ai clienti, senza tuttavia compromettere i corretti livelli di qualità e sicurezza. Oppure, può concentrarsi sulla rapidità con cui viene identificato e risolto un problema o un bug prima di una nuova release.

L'infrastruttura sottostante supporta le pratiche di DevOps anche con performance, disponibilità e affidabilità del software ottimali, grazie ai processi di sviluppo e test che precedono l'invio del software all'ambiente di produzione.

Metodi DevOps

Esistono alcuni metodi DevOps di uso comune che le organizzazioni possono adottare per accelerare e migliorare lo sviluppo e le release dei prodotti. Si tratta di metodologie e pratiche di sviluppo software. Tra le più popolari sono incluse Scrum, Kanban e Agile:

  • Scrum. Scrum definisce il modo in cui i membri di un team devono collaborare per accelerare i progetti di sviluppo e QA. Le pratiche di Scrum includono flussi di lavoro chiave e terminologia specifica (sprint, time box, daily scrum [meeting]), nonché ruoli designati (Scrum Master, Product Owner).
  • Kanban. Kanban è una metodologia nata dalle pratiche efficienti adottate nello stabilimento della Toyota. Kanban prevede che lo stato di un progetto software Work in Progress (WIP) venga monitorato su una lavagna Kanban.
  • Agile. Le prime metodologie agili di sviluppo software continuano a influenzare notevolmente le pratiche e i tool DevOps. Molte metodologie DevOps, tra cui Scrum e Kanban, incorporano elementi di programmazione agile. Alcune pratiche agili sono associate a una maggiore reattività alle esigenze e ai requisiti in continua evoluzione, sulla base di pratiche di documentazione dei requisiti specifici degli utenti, relazioni quotidiane e integrazione dei feedback continui dei clienti. L'agilità impone inoltre cicli di vita per lo sviluppo del software più brevi invece dei lunghi e tradizionali metodi di sviluppo "a cascata".

Toolchain DevOps

I seguaci delle pratiche DevOps spesso utilizzano alcuni tool compatibili con DevOps come parte della loro "toolchain" DevOps. L'obiettivo di questi strumenti è quello di ottimizzare, ridurre e automatizzare ulteriormente le varie fasi del flusso di lavoro di delivery del software (o "pipeline"). Molti di questi tool promuovono anche i principi DevOps fondamentali di automazione, collaborazione e integrazione tra team di sviluppo e operativi. Di seguito sono indicati alcuni tool di esempio utilizzati nelle varie fasi del ciclo di vita DevOps.

  • Pianificazione. In questa fase vengono definiti il valore e i requisiti di business. I tool di esempio includono Jira o Git per tenere traccia dei problemi noti ed eseguire la gestione dei progetti.
  • Codifica. Questa fase prevede la progettazione del software e la creazione del relativo codice. I tool di esempio includono GitHub, GitLab, Bitbucket o Stash.
  • Creazione. In questa fase vengono gestite le build e le versioni del software e utilizzati tool automatici per la compilazione e la creazione del package del codice per la successiva release inviata in produzione. Vengono utilizzati repository di codice o repository di pacchetti sorgente che includono anche l'infrastruttura necessaria per la release del prodotto. I tool di esempio includono Docker, Ansible, Puppet, Chef, Gradle, Maven o JFrog Artifactory.
  • Test. Questa fase prevede test continui (manuali o automatici) per garantire la qualità ottimale del codice. I tool di esempio includono JUnit, Codeception, Selenium, Vagrant, TestNG o BlazeMeter.
  • Implementazione. Questa fase può includere tool che consentono di gestire, coordinare, pianificare e automatizzare le release dei prodotti in produzione. I tool di esempio includono Puppet, Chef, Ansible, Jenkins, Kubernetes, OpenShift, OpenStack, Docker o Jira.
  • Funzionamento. Questa fase riguarda la gestione del software durante la produzione. I tool di esempio includono Ansible, Puppet, PowerShell, Chef, Salt o Otter.
  • Monitoraggio. Questa fase prevede l'identificazione e la raccolta di informazioni sui problemi di una release software specifica in fase di produzione. I tool di esempio includono New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios o Slack.

Pratiche DevOps

Le pratiche DevOps riflettono l'idea di un miglioramento e un'automazione continui. Molte pratiche si concentrano su una o più fasi del ciclo di sviluppo. Queste includono:

  • Sviluppo continuo. Questa pratica riguarda le fasi di pianificazione e codifica del ciclo di vita DevOps, ma potrebbe interessare anche i meccanismi di controllo delle versioni.
  • Test continui. Questa pratica include test del codice automatizzati, programmati e continui, durante la scrittura o l'aggiornamento del codice dell'applicazione. Tali test possono accelerare la delivery del codice alla produzione.
  • Integrazione continua. Questa pratica integra i tool di gestione della configurazione con altri tool di test e sviluppo per monitorare quanto del codice in fase di sviluppo è pronto per la produzione. Implica un rapido feedback tra ambiente di test e di sviluppo per identificare e risolvere rapidamente i problemi relativi al codice.
  • Delivery continua. Questa pratica automatizza la delivery delle modifiche del codice, successive al test, a un ambiente di pre-produzione o di staging. Un membro dello staff potrebbe quindi decidere di promuovere tali modifiche del codice in produzione.
  • Implementazione continua. Simile alla delivery continua, questa pratica automatizza la release di codice nuovo o modificato in produzione. Un'azienda che esegue un'implementazione continua potrebbe rilasciare modifiche di codice o funzionalità diverse volte al giorno. L'utilizzo di tecnologie container, come Docker e Kubernetes, può consentire un'implementazione continua e contribuire a mantenere la coerenza del codice tra piattaforme e ambienti di implementazione differenti.
  • Monitoraggio continuo. Questa pratica prevede il monitoraggio continuo del codice implementato e dell'infrastruttura sottostante che lo supporta. Successivamente, un loop di feedback che segnala eventuali bug o problemi viene restituito all'ambiente di sviluppo.
  • Infrastruttura come codice. Questa pratica può essere utilizzata durante varie fasi DevOps per automatizzare il provisioning dell'infrastruttura richiesto per una release del software. Gli sviluppatori aggiungono il "codice" dell'infrastruttura dai propri tool di sviluppo. Ad esempio, gli sviluppatori potrebbero creare un volume di storage on-demand da Docker, Kubernetes o OpenShift. Tale pratica, inoltre, consente ai team operativi di monitorare le configurazioni dell'ambiente, tenere traccia delle modifiche e semplificare il rollback delle configurazioni.

Benefici di DevOps

I sostenitori di DevOps ne descrivono diversi vantaggi tecnici e aziendali, molti dei quali contribuiscono a migliorare la soddisfazione dei clienti. Alcuni di questi vantaggi chiave includono:

  • Delivery dei prodotti più rapida ed efficiente
  • Risoluzione dei problemi più rapida e complessità ridotta
  • Maggiore scalabilità e disponibilità
  • Ambienti operativi più stabili
  • Migliore utilizzo delle risorse
  • Maggiore automazione
  • Maggiore visibilità sui risultati del sistema
  • Maggiore innovazione

Storia di DevOps

Molti metodi DevOps per semplificare lo sviluppo e l'implementazione del software affondano le loro radici nello sviluppo agile del software e nella programmazione snella. Tuttavia, originariamente DevOps nasce come evoluzione di diversi movimenti di base allo scopo di armonizzare le attività degli sviluppatori e delle loro controparti nei team operativi.

I primi anni 2000 hanno visto la necessità di garantire la disponibilità di siti Web popolari come Google e Flickr, che riscuotevano un enorme successo. Questa esigenza ha reso necessario rivolgersi ai Software Reliability Engineer (SRE), ovvero personale operativo che lavora a stretto contatto con gli sviluppatori per garantire il funzionamento ininterrotto dei siti dopo la release in produzione del loro codice.

Nel 2009 gli ingegneri di Flickr, John Allspaw e Paul Hammond, hanno presentato la propria metodologia DevOps in una conferenza. Il titolo della loro presentazione era "10+ Deploys per Day: Dev and Ops Cooperation at Flickr". Lo stesso anno, Patrick Debois ha organizzato il primo "DevOps Day" in Belgio. Anche l'hashtag #DevOps, creato in questa occasione, ha ottenuto un enorme slancio man mano che altri DevOps Day venivano organizzati in tutto il mondo.

Negli anni successivi, sono stati sviluppati e proposti framework e tool open-source e di settore per promuovere gli obiettivi di DevOps.

NetApp e DevOps

NetApp aiuta a promuovere risultati di business migliori grazie alla metodologia DevOps: i team operativi offrono un'infrastruttura automatizzata con meno processi di engineering e gli sviluppatori creano in ambienti affidabili e prevedibili con meno ostacoli. Grazie alla tecnologia NetApp®, puoi offrire in tutta sicurezza i servizi e le funzionalità di cui la tua organizzazione ha bisogno per massimizzare la produttività degli sviluppatori in ambienti sia on-premise che nel cloud.

NetApp permette a sviluppatori e team operativi o addetti alle procedure di test e QA di utilizzare le risorse dell'infrastruttura, ad esempio i volumi di storage persistenti, come codice direttamente dai tool familiari della pipeline DevOps. Un esempio sono le API di storage NetApp e le integrazioni IAC con tool come Puppet, Ansible, Docker, Kubernetes e OpenShift.

Tuttavia, NetApp non si limita solo a semplificare l'utilizzo dello storage come codice da parte degli sviluppatori. La tecnologia NetApp supporta anche operazioni che consentono di fornire risorse al personale responsabile delle procedure di sviluppo e test, in sicurezza. In questo modo, sviluppatori e tester possono accelerare i cicli di codifica e test mediante il provisioning automatico di funzionalità di storage rapide ed efficienti, come snapshot o cloni. Grazie a queste funzionalità, è possibile eseguire in pochi secondi o minuti il provisioning come codice di copie di dati di produzione o set di codici in tempo reale, per accelerare il flusso di lavoro di sviluppo e QA.

L'impegno di NetApp nei confronti della community si estende a thePub, una community di sviluppatori che favorisce la collaborazione, condivide suggerimenti e trucchi ed esamina idee sulle pratiche e i protocolli DevOps più recenti.

Ulteriori informazioni su DevOps