Introduzione a DevOps per principianti

L’espressione “DevOps” è diventata un termine molto utilizzato, assumendo significati diversi per molte persone.

Comprendere appieno e definire con precisione cosa sia DevOps può risultare complicato. Pertanto, familiarizzare con i concetti fondamentali di DevOps, condivisi dalla maggior parte degli addetti ai lavori, e con la sua evoluzione storica, può offrire una prospettiva completa.

La genesi di DevOps

DevOps rappresenta un esempio lampante di sviluppo software agile. L’idea alla base di DevOps è nata dall’esigenza di tenere il passo con la crescente velocità di rilascio del software, obiettivo raggiungibile attraverso metodologie agili. Nel corso dell’ultimo decennio, i significativi progressi nella cultura e nelle pratiche agili hanno evidenziato la necessità di un approccio più olistico all’intero ciclo di vita della distribuzione del software.

Potreste chiedervi cosa si intenda per sviluppo agile del software:

Lo sviluppo agile è un termine ombrello che raggruppa diverse metodologie di sviluppo software iterative e incrementali. Le metodologie agili più comuni includono Scrum, Kanban, Scaled Agile Framework® (SAFe®), Lean Development e Extreme Programming (XP).

Nonostante le peculiarità di ciascun approccio, tutte queste metodologie agili condividono valori fondamentali e una visione comune. Si basano su iterazioni e feedback continui per perfezionare e rilasciare software scalabile. Prevedono pianificazione, test e integrazione continui, sia a livello di progetto che di software.

A differenza dei tradizionali processi a cascata, queste metodologie agili sono snelle e intrinsecamente adattabili. Uno dei loro principali vantaggi risiede nella capacità di valorizzare le persone, promuovendo la collaborazione e il processo decisionale rapido.

Gli ideali di DevOps estendono la pratica dello sviluppo agile, ottimizzando il flusso del cambiamento del software attraverso le fasi di creazione, validazione, implementazione e consegna. Ciò permette a team interfunzionali di assumere piena responsabilità del prodotto software, dalla fase di progettazione fino alla produzione.

Le sfide risolte da DevOps

Processo di rilascio: le applicazioni distribuite spesso richiedono la distribuzione di file binari e configurazioni su numerosi server, il che si complica in presenza di una server farm. Diventa difficile capire cosa, come e dove distribuire, con conseguenti ritardi.

La lunga attesa per il passaggio degli artefatti all’ambiente successivo del ciclo di vita rallenta l’intero processo, inclusi test e messa in produzione.

DevOps permette a sviluppatori software o web e alle operazioni IT di collaborare fluidamente, implementando processi senza intoppi. Ciò consente di verificare cosa funziona e, attraverso l’automazione, di raggiungere uno sviluppo continuo, con rilasci più frequenti.

Gli obiettivi di DevOps

DevOps mira a migliorare la collaborazione tra gli stakeholder, dalla pianificazione alla consegna, automatizzando il processo di rilascio per:

  • Aumentare la frequenza dei rilasci
  • Ridurre il time-to-market del prodotto finale
  • Diminuire il tasso di errore delle nuove versioni
  • Abbreviare il tempo di attesa per le correzioni
  • Migliorare i tempi di ripristino

Scenario DevOps tipico

La creazione di un nuovo progetto software prevede la formazione di un team composto da sviluppatori, tester, addetti alle operazioni e al supporto. Il team definisce un piano per la realizzazione di un software completamente funzionante e pronto per la distribuzione.

Ogni giorno, il nuovo codice completato dagli sviluppatori viene rilasciato. La procedura di test automatizzata assicura che il codice sia pronto per l’implementazione. Una volta superati i test, il codice viene distribuito a un gruppo limitato di utenti e monitorato per verificare la presenza di problemi imprevisti. Se il monitoraggio finale conferma la stabilità del codice, questo viene distribuito a tutti gli utenti. Gran parte delle fasi successive alla pianificazione e allo sviluppo vengono eseguite senza interventi manuali.

Le fasi di maturità di DevOps

Il percorso verso la maturità DevOps si articola in diverse fasi. Ecco le principali:

Sviluppo a cascata

Prima dell’avvento dell’integrazione continua, i team di sviluppo scrivevano ingenti quantità di codice, che venivano poi unificate per il rilascio. Le versioni del codice differivano notevolmente, richiedendo numerose modifiche.

L’applicazione di queste modifiche richiedeva mesi. Si trattava di un processo poco efficiente.

Integrazione continua

Questa pratica prevede l’integrazione rapida del nuovo codice con il codice principale pronto per il rilascio. L’integrazione continua consente di risparmiare molto tempo durante il rilascio del codice.

Il termine non è nato con DevOps. L’integrazione continua è una pratica di ingegneria agile derivante dalla metodologia Extreme Programming. DevOps ha adottato questa pratica perché l’automazione è fondamentale per una corretta integrazione continua. L’integrazione continua rappresenta spesso il primo passo verso la maturità DevOps.

Nell’ottica di DevOps, l’integrazione continua comprende passaggi come il controllo del codice, la sua compilazione e l’esecuzione dei test di validazione necessari.

Consegna continua

Rappresenta un’estensione dell’integrazione continua e la seconda fase di DevOps.

La consegna continua aggiunge ulteriori livelli di automazione e test, assicurando che il codice non solo venga integrato rapidamente, ma sia anche quasi pronto per la distribuzione senza interventi manuali.

Questa pratica mira a mantenere la codebase in uno stato sempre pronto per la distribuzione.

Distribuzione continua

La distribuzione continua è l’evoluzione più avanzata della consegna continua. Questa pratica permette di implementare ogni modifica in produzione senza interventi manuali.

Il team che lavora con la distribuzione continua non rilascia mai codice senza averlo testato. Tutto il codice appena creato viene sottoposto a test automatizzati prima di entrare in produzione. Il codice viene distribuito a un numero ristretto di utenti e viene attivato un ciclo di feedback automatico per monitorare qualità e utilizzo prima di un rilascio più ampio.

Alcune aziende, come Netflix, Etsy, Amazon, Pinterest, Flicker, IMVU e Google, utilizzano la distribuzione continua.

Il valore

DevOps si concentra sullo sviluppo di una cultura collaborativa e sull’aumento dell’efficienza attraverso l’automazione, con l’ausilio di diversi strumenti. Per implementare DevOps, è necessario combinare cultura e strumenti.

La cultura DevOps

DevOps è una cultura che mira a migliorare la collaborazione, ridurre il caos, gestire meglio le responsabilità condivise, implementare l’automazione, migliorare la qualità, valutare il feedback e aumentare l’automazione.

Le metodologie agili hanno sempre rappresentato un approccio olistico per lo sviluppo del software. Il progresso è misurato in termini di software funzionante. La cultura DevOps agile consente a product owner, sviluppatori, tester e professionisti UX di collaborare con un obiettivo comune.

Gli strumenti DevOps

Questi strumenti includono la gestione della configurazione, i test, la creazione di sistemi, lo sviluppo di applicazioni, il controllo delle versioni e il monitoraggio. L’implementazione di integrazione continua, consegna continua e distribuzione continua richiede strumenti diversi, spesso usati in combinazione. È necessario utilizzare un numero crescente di strumenti man mano che si avanza nella catena di rilascio.

Ecco alcuni degli strumenti e delle pratiche più diffuse:

Repository del codice sorgente: uno spazio dove gli sviluppatori possono archiviare e modificare il codice. Il repository gestisce le diverse versioni del codice, garantendo che gli sviluppatori non sovrascrivano il lavoro altrui.

Git, Apache Subversion, IBM Rational, Artifactory, Nexus, Eclipse sono alcuni degli strumenti più comuni per i repository di codice.

Server di compilazione: un tool di automazione che compila il codice sorgente per renderlo eseguibile. Jenkins, SonarQube e Artifactory sono tra gli strumenti più usati per i server di compilazione.

Gestione della configurazione: Puppet, Chef, Ansible, SaltStack e Run Deck contribuiscono a gestire la configurazione per applicazioni e infrastruttura, mantenendo la coerenza tra gli ambienti.

Infrastruttura virtuale: AWS, GCP e Azure sono i tre principali provider di cloud pubblico che offrono quasi tutti i servizi infrastrutturali. Forniscono API per creare e gestire l’infrastruttura come codice.

Conclusione

Spero che questo articolo ti abbia fornito una panoramica su DevOps. Se sei interessato ad approfondire, puoi provare a seguire un corso online.

Articolo di Payal Goyal