- Introduzione
- Capitolo 1: Cos'è DevOps? Comprendere la filosofia fondamentale
- Capitolo 2: Principi chiave di DevOps: Framework CALMS
- Capitolo 3: SDLC tradizionale vs. Agile vs. DevOps
- Capitolo 4: Controllo versione essenziale: Iniziare con Git
- Capitolo 5: Integrazione continua (CI): Automatizzare le build
- Capitolo 6: Strumenti CI popolari: Una panoramica (es. Jenkins, GitLab CI, GitHub Actions)
- Capitolo 7: Il ruolo dei test automatizzati in CI/CD
- Capitolo 8: Consegna continua (CD): Rilasciare software in modo affidabile
- Capitolo 9: Deployment continuo: Il prossimo passo nell'automazione
- Capitolo 10: Infrastruttura come codice (IaC): Gestire gli ambienti programmaticamente
- Capitolo 11: Introduzione agli strumenti di gestione della configurazione (es. Ansible, Puppet, Chef)
- Capitolo 12: Comprendere i container: Docker per principianti
- Capitolo 13: Introduzione all'orchestrazione dei container: Fondamenti di Kubernetes
- Capitolo 14: Monitoraggio e logging: Ottenere visibilità sui propri sistemi
- Capitolo 15: Strumenti e pratiche chiave per il monitoraggio
- Capitolo 16: L'importanza dei cicli di feedback in DevOps
- Capitolo 17: Cloud computing e DevOps: Sfruttare le piattaforme cloud
- Capitolo 18: DevSecOps: Integrare la sicurezza nel ciclo di vita DevOps
- Capitolo 19: Costruire una cultura DevOps: Collaborazione e comunicazione
- Capitolo 20: Comprendere i microservizi in un contesto DevOps
- Capitolo 21: Value Stream Mapping: Ottimizzare la pipeline di consegna
- Capitolo 22: Misurare il successo DevOps: Metriche chiave e KPI
- Capitolo 23: Anti-pattern DevOps comuni e come evitarli
- Capitolo 24: Il tuo primo progetto DevOps semplice: Una guida passo dopo passo
- Capitolo 25: Il futuro di DevOps e l'apprendimento continuo
DevOps
Indice
Introduzione
Benvenuti nel mondo del DevOps! Se avete preso in mano questo libro, probabilmente siete curiosi di capire di cosa si tratti questo "DevOps", o forse avete sentito il termine ronzare in giro e volete comprenderne le implicazioni pratiche. Potreste essere uno sviluppatore software stanco del muro metaforico tra il vostro team e quello operativo, un ingegnere operativo frustrato dalle "bombe" di codice dell'ultimo minuto, o un leader aziendale che si chiede come portare nuove funzionalità e prodotti ai propri clienti più velocemente e in modo più affidabile. Qualunque sia il vostro punto di partenza, siete nel posto giusto.
Questo libro, "DevOps: Una Guida per Principianti", è progettato per demistificare il DevOps, scomponendo i suoi concetti fondamentali, principi e pratiche in parti digeribili. Esploreremo come il DevOps miri a colmare il divario storico tra chi costruisce il software (Sviluppo) e chi lo mantiene in esecuzione (Operazioni). È un viaggio in un movimento culturale e professionale che enfatizza la collaborazione, l'automazione e il miglioramento continuo.
In un passato non troppo lontano, e in alcune organizzazioni ancora oggi, il ciclo di vita dello sviluppo software era spesso un processo frammentato e inefficiente. Gli sviluppatori scrivevano codice, per poi "gettarlo oltre il muro" al team operativo per il deployment e la manutenzione. Questo spesso portava a una caccia al colpevole quando le cose andavano storte, con gli sviluppatori che puntavano il dito contro l'infrastruttura e i team operativi che rimandavano la palla al codice buggato. Questo approccio a silos creava attriti significativi, rallentava i rilasci e, in ultima analisi, influenzava la capacità dell'azienda di rispondere ai cambiamenti del mercato e alle esigenze dei clienti.
Pensate ad alcune delle frustrazioni comuni nello sviluppo software tradizionale. Vi ricordate quei cicli di rilascio maratona nel weekend, pieni di ansia e rollback d'emergenza? O l'infinito rimpallo tra sviluppo e operazioni per diagnosticare un problema in produzione? Forse avete sperimentato il dolore della sindrome "sul mio computer funziona", dove codice che funziona perfettamente nell'ambiente isolato di uno sviluppatore crolla nell'ambiente di produzione. Questi non sono incidenti isolati; sono sintomi di un problema sistemico che il DevOps mira a risolvere.
Il costo di queste inefficienze non si misura solo in tempo sprecato e ingegneri frustrati. Cattive pratiche di sviluppo software possono portare a costi di sviluppo e manutenzione aumentati, poiché i team passano più tempo a risolvere problemi che a costruire nuovo valore. Progetti ritardati possono risultare in opportunità di mercato perse, permettendo ai concorrenti di prendere il sopravvento. Vulnerabilità di sicurezza, spesso trascurate in processi affrettati o mal coordinati, possono portare a violazioni catastrofiche, danneggiando la reputazione e i profitti di un'azienda. In effetti, studi hanno dimostrato che una consegna software inefficace può costare alle aziende milioni, persino centinaia di milioni, di dollari all'anno.
La realtà è che nel mondo digital-first di oggi, il software è al centro di quasi ogni business. La capacità di consegnare software di alta qualità velocemente e in modo affidabile non è più un lusso, ma un requisito fondamentale per la competitività e la crescita. I clienti si aspettano aggiornamenti frequenti, nuove funzionalità e un'esperienza utente senza interruzioni. Le aziende devono essere agili, in grado di pivotare rapidamente in risposta alle mutevoli esigenze del mercato e al feedback dei clienti. È qui che entra in gioco il DevOps, offrendo un percorso per trasformare la consegna software da un collo di bottiglia a un vantaggio strategico.
Quindi, cos'è esattamente questo approccio trasformativo? Nel suo nucleo, il DevOps è una filosofia culturale. È più di un semplice set di strumenti o di un titolo di lavoro specifico; è un cambiamento di mentalità che favorisce la collaborazione, la comunicazione e la responsabilità condivisa lungo l'intero ciclo di vita della consegna software. Si tratta di abbattere i silos tradizionali tra sviluppo, operazioni, quality assurance (QA) e persino i team di sicurezza, incoraggiandoli a lavorare insieme verso obiettivi comuni.
Questo cambiamento culturale è sostenuto da una serie di principi e pratiche chiave. Sentirete molto parlare di automazione nel contesto del DevOps, e per una buona ragione. Automatizzare attività ripetitive come build, test e deployment del software libera tempo umano prezioso, riduce il rischio di errori manuali e accelera l'intera pipeline di consegna. Concetti come Integrazione Continua (CI) e Consegna/Deployment Continuo (CD) sono centrali in questo, permettendo ai team di rilasciare software più velocemente e in modo più affidabile.
Ma il DevOps non riguarda solo la velocità; riguarda anche qualità e stabilità. Integrando i test lungo tutto il processo di sviluppo e implementando robusti meccanismi di monitoraggio e feedback, il DevOps aiuta i team a individuare i problemi prima, ridurre i rischi e assicurare che il software consegnato non sia solo veloce ma anche affidabile e sicuro.
Nel corso di questo libro, sviscereremo questi concetti in dettaglio. Inizieremo definendo il DevOps in modo più formale ed esplorandone la filosofia fondamentale. Poi approfondiremo i principi chiave, spesso riassunti dal framework CALMS (Cultura, Automazione, Lean, Misurazione, Condivisione). Confronteremo i cicli di vita tradizionali dello sviluppo software con le metodologie Agile e vedremo come il DevOps costruisca ed estenda queste idee.
Una parte significativa del libro sarà dedicata agli strumenti e alle tecniche pratiche che abilitano il DevOps. Tratteremo il controllo versione essenziale con Git, una pietra angolare per lo sviluppo collaborativo. Esploreremo l'Integrazione Continua e gli strumenti popolari che la facilitano, come Jenkins, GitLab CI e GitHub Actions. Discuteremo il ruolo critico dei test automatizzati nel garantire la qualità all'interno delle pipeline CI/CD.
Da lì, passeremo alla Consegna Continua e al Deployment Continuo, capendo come rilasciare software in modo affidabile e, in alcuni casi, completamente automatico. Introdurremo l'Infrastructure as Code (IaC), un approccio rivoluzionario per gestire e provisionare l'infrastruttura usando codice, e daremo uno sguardo a popolari strumenti di configuration management come Ansible, Puppet e Chef.
I container, in particolare Docker, sono diventati una parte indispensabile del deployment software moderno, quindi forniremo un'introduzione adatta ai principianti alla containerizzazione e ai suoi benefici. Toccheremo anche l'orchestrazione dei container con Kubernetes, una potente piattaforma per gestire applicazioni containerizzate su larga scala.
Nessun viaggio DevOps è completo senza un focus sulla visibilità. Esploreremo monitoraggio e logging, pratiche essenziali per capire come i vostri sistemi stanno performando e per diagnosticare e risolvere rapidamente i problemi. Daremo anche uno sguardo ai principali strumenti di monitoraggio e alle best practice. L'importanza dei cicli di feedback, un tema ricorrente nel DevOps, sarà evidenziata, mostrando come guidino il miglioramento continuo.
Esamineremo come le piattaforme di cloud computing siano diventate potenti abilitatrici delle pratiche DevOps, offrendo scalabilità e servizi gestiti che semplificano molti aspetti della consegna software e delle operazioni. La sicurezza è un altro aspetto critico, e discuteremo il DevSecOps – la pratica di integrare le considerazioni di sicurezza lungo l'intero ciclo di vita DevOps, piuttosto che trattarla come un ripensamento.
Oltre agli strumenti e ai processi, costruire un ambiente DevOps di successo si basa pesantemente sul promuovere la cultura giusta. Dediceremo un capitolo alla costruzione di una cultura DevOps, enfatizzando l'importanza di collaborazione, comunicazione, fiducia e responsabilità condivisa. Toccheremo anche pattern architetturali come i microservizi e come si inseriscano in un contesto DevOps, nonché tecniche come il Value Stream Mapping per identificare ed eliminare i colli di bottiglia nella vostra pipeline di consegna.
Per assicurarvi di essere sulla strada giusta, discuteremo come misurare il successo del DevOps usando metriche chiave e Key Performance Indicators (KPI). Tratteremo anche insidie comuni e anti-pattern per aiutarvi a evitarli nel vostro percorso DevOps.
Infine, per mettere tutto insieme, vi guideremo attraverso un semplice progetto DevOps passo-passo, permettendovi di vedere questi principi e pratiche in azione. E poiché il mondo della tecnologia è in continua evoluzione, concluderemo con uno sguardo al futuro del DevOps e all'importanza dell'apprendimento continuo.
Questo libro non presuppone una profonda competenza tecnica pregressa in tutte le aree trattate, sebbene una comprensione di base dei concetti di sviluppo software sarà utile. Il nostro obiettivo è fornirvi una solida base, dotandovi delle conoscenze e della fiducia per iniziare ad applicare i principi DevOps nel vostro contesto, che facciate parte di una piccola startup o di una grande impresa.
La transizione al DevOps è un viaggio, non una destinazione. Richiede pazienza, perseveranza e la volontà di abbracciare il cambiamento. Ci saranno sfide lungo il cammino, come superare la resistenza a nuovi modi di lavorare o navigare le complessità di nuovi strumenti. Tuttavia, i benefici – consegna più veloce, qualità migliorata, efficienza aumentata, collaborazione potenziata e, in ultima analisi, maggior valore di business – valgono bene lo sforzo.
Quindi, allacciate le cinture e preparatevi a esplorare come il DevOps può trasformare il modo in cui voi e la vostra organizzazione costruite e consegnate software. Iniziamo insieme questo entusiasmante viaggio!
CAPITOLO UNO: Cos'è il DevOps? Comprendere la filosofia fondamentale
Benvenuti nel primo capitolo del vostro viaggio alla comprensione del DevOps. Il termine stesso è diventato onnipresente nel mondo tecnologico, spesso citato nelle descrizioni dei ruoli, nelle mission aziendali e nelle conferenze sullo sviluppo software. Ma al di là del clamore, cosa significa realmente "DevOps"? È un titolo professionale, un team specifico, una raccolta di strumenti software o qualcosa di più profondo? In questo capitolo, rimuoveremo gli strati superficiali ed esploreremo la filosofia fondamentale che sostiene questo approccio trasformativo allo sviluppo software e alle operazioni IT.
Il termine "DevOps" è un parola macedonia, una fusione linguistica di "Development" (Sviluppo) e "Operations" (Operazioni). Questa semplice combinazione accenna alla sua idea centrale: l'unione di questi due mondi storicamente separati, e spesso in conflitto. Tradizionalmente, i team di sviluppo erano concentrati sulla creazione di nuove funzionalità e sul loro rilascio, mentre i team operativi avevano il compito di garantire la stabilità e l'affidabilità dei sistemi di produzione. Questo creava spesso una tensione naturale, un "muro di confusione" dove il codice veniva metaforicamente lanciato da una parte all'altra, portando a incomprensioni, ritardi e frustrazione.
Il DevOps è emerso come risposta a queste sfide. Non è qualcosa che si può semplicemente acquistare o installare; rappresenta piuttosto un movimento culturale e professionale che enfatizza la collaborazione, la comunicazione e l'integrazione tra sviluppatori software e professionisti delle operazioni IT. L'obiettivo primario è automatizzare e snellire i processi coinvolti nella costruzione, nel test e nel rilascio del software, consentendo alle organizzazioni di fornire valore ai propri utenti più velocemente e in modo più affidabile. Mira ad abbattere i silos tradizionali, promuovendo un senso condiviso di proprietà e responsabilità lungo l'intero ciclo di vita della consegna software.
Una delle prime cose da capire è che il DevOps non è una metodologia rigida, valida per tutti, con un insieme rigoroso di regole. È piuttosto una filosofia o un approccio che le organizzazioni adattano al proprio contesto e alle proprie esigenze specifiche. Diverse aziende possono implementare il DevOps in modi leggermente diversi, concentrandosi su pratiche o strumenti particolari che meglio si adattano al loro ambiente. Tuttavia, i principi sottostanti di collaborazione, automazione e miglioramento continuo rimangono costanti.
Potreste sentire descrivere il DevOps come "un'amministrazione di sistema Agile" o "l'Agile applicato alle operazioni". Sebbene vi siano forti legami con le metodologie Agile, in particolare in termini di sviluppo iterativo, feedback continuo e adattabilità, il DevOps estende questi principi oltre il solo team di sviluppo. Mira a creare un flusso continuo dal concepimento dell'idea fino al deployment in produzione e alla manutenzione continua, coinvolgendo tutti coloro che partecipano al ciclo di vita del prodotto.
La genesi del DevOps può essere fatta risalire alla metà/fine degli anni 2000, un periodo in cui diverse tendenze e idee del settore iniziarono a convergere. Le pratiche di sviluppo software Agile stavano guadagnando un'adozione diffusa, evidenziando i vantaggi di iterazioni rapide e reattività al cambiamento. Simultaneamente, i team operativi IT si confrontavano con la crescente complessità e scala delle applicazioni e delle infrastrutture basate sul web. Visionari come Patrick Debois, che coniò il termine "DevOps" nel 2009, e altri iniziarono a sostenere un approccio più integrato.
I punti dolenti stavano diventando sempre più evidenti in molte organizzazioni. Cicli di rilascio lunghi e infrequenti significavano che nuove funzionalità e correzioni di bug impiegavano troppo tempo per raggiungere gli utenti. I deployment erano spesso eventi ad alto rischio, manuali e soggetti a errori, che a volte richiedevano significativi tempi di inattività. La disconnessione tra sviluppo e operazioni portava a un "gioco delle colpe" ogni volta che sorgevano problemi, con ciascuna parte che puntava il dito contro l'altra. Questo ambiente non era favorevole all'innovazione né a una rapida risposta alle richieste del mercato.
Considerate lo scenario fin troppo comune in cui il software funzionava perfettamente sul laptop di uno sviluppatore, ma falliva in modo spettacolare nell'ambiente di produzione. Questa "sindrome 'sul mio computer funziona'" era un sintomo classico del divario tra sviluppo e operazioni, dove differenze negli ambienti, nelle configurazioni e nelle assunzioni potevano portare a problemi significativi. Il DevOps mira a eliminare tali discrepanze promuovendo coerenza e collaborazione sin dalle prime fasi dello sviluppo.
Pertanto, nel suo cuore, il DevOps è un cambiamento culturale. Si tratta di cambiare le mentalità e promuovere un ambiente in cui i team di sviluppo e operazioni si vedano come parte di un'unica unità coesa che lavora verso obiettivi condivisi. Ciò richiede di costruire fiducia, incoraggiare una comunicazione aperta e promuovere l'empatia tra i membri del team. Si tratta di comprendere le sfide reciproche e lavorare insieme per superarle.
È fondamentale differenziare il DevOps dal semplice fatto di essere un nuovo nome per un ingegnere operativo che sa scrivere script, o per uno sviluppatore che sa fare il deploy del proprio codice. Sebbene le competenze nell'automazione e una comprensione più ampia siano preziose, il titolo di "ingegnere DevOps" non crea magicamente una cultura DevOps. Il cambiamento culturale è fondamentale; senza di esso, potreste avere individui con nuove competenze che operano ancora all'interno delle vecchie strutture a silos.
Questa trasformazione culturale si concentra sulla responsabilità condivisa. Invece di considerare il proprio lavoro concluso una volta scritto il codice, e lasciare che le operazioni lo prendano in carico da lì, il DevOps incoraggia una mentalità "chi lo costruisce, lo gestisce" ("you build it, you run it"), o almeno un approccio "chi lo costruisce, aiuta a gestirlo". Ciò significa che gli sviluppatori acquisiscono una migliore comprensione delle implicazioni operative del loro codice, e i team operativi si coinvolgono prima nel ciclo di vita dello sviluppo per fornire feedback su deployabilità e gestibilità.
Immaginate una squadra sportiva. Perché la squadra abbia successo, ogni giocatore deve comprendere il proprio ruolo, comunicare efficacemente con gli altri e lavorare verso l'obiettivo comune di vincere la partita. Se attacco e difesa non si coordinano o, peggio, si incolpano a vicenda per i fallimenti, è improbabile che la squadra si comporti bene. Il DevOps porta questo stesso spirito collaborativo e orientato al team nella consegna software.
Questa filosofia ha un impatto diretto su come i team sono strutturati e su come interagiscono. Invece di grandi dipartimenti isolati, potreste vedere team più piccoli e cross-funzionali che includono sviluppatori, personale operativo, ingegneri QA, e talvolta anche specialisti di sicurezza e stakeholder di business. Questi team sono autorizzati a possedere l'intero ciclo di vita di un servizio o applicazione, dalla progettazione e sviluppo fino al deployment e alla gestione continua.
L'enfasi sull'abbattimento dei silos non riguarda solo Sviluppo e Operazioni. Il pensiero DevOps autentico si estende al Quality Assurance (QA), alla sicurezza (portando al concetto di DevSecOps, che esploreremo più avanti), e persino al business stesso. Quando tutti coloro che sono coinvolti nella consegna e nel supporto del software sono allineati e comunicano efficacemente, l'intero processo diventa più efficiente e reattivo.
Collaborazione e comunicazione sono il sangue vitale di questa filosofia. Riunioni regolari, canali di comunicazione condivisi (come le piattaforme di chat) e strumenti collaborativi sono importanti, ma ancora più importante è la volontà di ascoltare prospettive diverse e lavorare costruttivamente verso le soluzioni. Si tratta di passare da una cultura "noi contro loro" a una di "noi".
L'empatia gioca un ruolo sorprendentemente significativo nella filosofia DevOps. Quando gli sviluppatori comprendono le pressioni e le sfide affrontate dai team operativi (come mantenere l'uptime e gestire gli incidenti in produzione), è più probabile che costruiscano software più facile da deployare e gestire. Al contrario, quando i team operativi apprezzano la necessità degli sviluppatori di innovare e rilasciare funzionalità rapidamente, è più probabile che collaborino a soluzioni che abilitino la velocità senza sacrificare la stabilità.
Quindi, perché adottare questa filosofia? Quali sono i benefici tangibili che spingono le organizzazioni ad abbracciare il DevOps? Uno dei vantaggi più citati è l'aumento di velocità e agilità. Snellendo i processi e automatizzando le attività ripetitive, il DevOps consente ai team di rilasciare software più frequentemente e con tempi di attesa (lead time) più brevi. Ciò significa che le aziende possono portare nuove funzionalità e miglioramenti sul mercato più velocemente, rispondendo più rapidamente al feedback dei clienti e alle pressioni competitive.
Tuttavia, il DevOps non riguarda solo l'andare veloci; riguarda l'andare veloci in sicurezza. Qualità e affidabilità migliorate sono anche risultati chiave. Integrando i test lungo tutto il ciclo di vita dello sviluppo (una pratica nota come Test Continuo) e implementando robusti meccanismi di monitoraggio e feedback, i team possono identificare e correggere i problemi prima, riducendo la probabilità che bug raggiungano la produzione. I processi di deployment automatizzati minimizzano anche il rischio di errori umani durante i rilasci.
Maggiore efficienza e riduzione degli sprechi sono ulteriori benefici. L'automazione elimina il lavoro manuale ripetitivo (toil), liberando gli ingegneri per concentrarsi su attività di maggior valore. Migliorando la collaborazione e riducendo il rilavoro, il DevOps aiuta a minimizzare lo sforzo sprecato. Ciò può portare a minori costi operativi e a una migliore produttività in generale.
In definitiva, la filosofia DevOps mira ad allineare la consegna software più strettamente agli obiettivi di business. Quando l'IT può consegnare funzionalità più velocemente, in modo più affidabile e con qualità superiore, il business è meglio posizionato per innovare, soddisfare i clienti e raggiungere i propri obiettivi strategici. Lo sviluppo software e le operazioni IT si trasformano da centri di costo in generatori di valore per l'organizzazione.
Un altro beneficio, spesso trascurato, è il miglioramento del morale e del coinvolgimento del team. Lavorare in un ambiente collaborativo, ad alta fiducia, dove i contributi sono valorizzati e c'è un senso condiviso di scopo, può essere molto più gratificante che operare in una cultura a silos, orientata alla colpa. Ridurre lo stress associato a deployment ad alto rischio e al "firefighting" (gestione delle emergenze) contribuisce anche a un ambiente di lavoro più sano e sostenibile.
È importante riconoscere che l'adozione del DevOps è un viaggio, non una destinazione. Non esiste un interruttore magico che si può azionare per diventare un'organizzazione "DevOps". Richiede un impegno per il miglioramento continuo, la volontà di sperimentare e imparare dai fallimenti, e uno sforzo costante per nutrire la cultura desiderata. È un processo evolutivo.
Vi starete chiedendo come il DevOps si relaziona alle metodologie Agile, che molti team di sviluppo già praticano. L'Agile si concentra sullo sviluppo iterativo, la collaborazione con il cliente e la risposta al cambiamento, principalmente nell'ambito del team di sviluppo. Il DevOps prende questi principi ed li estende attraverso l'intero ciclo di vita della consegna del servizio, incluse le operazioni. Cerca di rimuovere i colli di bottiglia che spesso si verificano dopo che il processo di sviluppo Agile è completato, in particolare intorno al deployment e al rilascio.
Pensate all'Agile come all'ottimizzazione della parte "Dev" dell'equazione. Il DevOps guarda poi al quadro generale, ottimizzando il flusso fino a "Ops" e ritorno tramite cicli di feedback. I due sono altamente complementari e spesso funzionano meglio se implementati insieme. Il DevOps fornisce i meccanismi per garantire che il software sviluppato rapidamente dai team Agile possa essere consegnato agli utenti altrettanto rapidamente e in modo affidabile.
La filosofia del DevOps, quindi, prepara il terreno per tutte le pratiche, gli strumenti e le tecniche che esploreremo nei capitoli successivi di questo libro. Comprendere questa filosofia fondamentale – l'enfasi su cultura, collaborazione, responsabilità condivisa e miglioramento continuo – è essenziale prima di immergersi nei dettagli del controllo versione, dell'integrazione continua, dell'infrastructure as code o della containerizzazione. Questi strumenti e pratiche sono abilitatori della filosofia, non sostituti di essa.
Senza un genuino impegno verso il cambiamento culturale sottostante, la semplice adozione di alcuni strumenti DevOps è improbabile che produca i risultati desiderati. Potreste ottenere sacche di automazione, ma non sbloccherete il potenziale trasformativo del vero DevOps. È la combinazione di cambiamento culturale, miglioramento dei processi e tooling appropriato che porta al successo.
Considerate, ad esempio, la pratica dell'Integrazione Continua (CI), che tratteremo in dettaglio più avanti. La CI implica che gli sviluppatori uniscano frequentemente le loro modifiche al codice in un repository centrale, dopo di che build e test automatizzati vengono eseguiti. Gli strumenti per la CI sono facilmente disponibili. Tuttavia, affinché la CI sia efficace, richiede un impegno filosofico da parte degli sviluppatori a integrare presto e spesso, a scrivere test automatizzati e ad affrontare prontamente le build rotte. È qui che la filosofia incontra la pratica.
Allo stesso modo, l'Infrastructure as Code (IaC) è una pratica potente per gestire e provisionare l'infrastruttura attraverso file di definizione leggibili dalla macchina. Gli strumenti esistono, ma implementare con successo l'IaC richiede che i team operativi abbraccino pratiche simili allo sviluppo (come il controllo versione e i test per il codice dell'infrastruttura) e che sviluppatori e operazioni collaborino alla definizione dei requisiti infrastrutturali.
La filosofia DevOps fondamentale incoraggia anche un approccio basato sui dati per il miglioramento. Misurando metriche chiave relative alla pipeline di consegna software (come la frequenza di deployment, il lead time per le modifiche, il tasso di fallimento delle modifiche e il tempo medio di ripristino), i team possono identificare i colli di bottiglia, tracciare i progressi e prendere decisioni informate su dove concentrare i propri sforzi di miglioramento. Questo si allinea con il tema più ampio dell'apprendimento continuo e dell'adattamento.
Un malinteso comune è che il DevOps significhi eliminare il team operativo o che gli sviluppatori debbano ora fare tutto il lavoro operativo. Raramente è questo il caso. Sebbene i ruoli possano evolvere e i set di competenze allargarsi, l'esperienza dei professionisti operativi rimane critica. Ciò che cambia è come questi team lavorano insieme. L'esperienza operativa viene integrata prima nel ciclo di vita, e gli sviluppatori diventano più consapevoli e coinvolti negli aspetti operativi delle loro applicazioni.
L'idea è creare una relazione simbiotica. Gli sviluppatori beneficiano dell'esperienza operativa che fa girare le loro applicazioni in modo fluido e affidabile in produzione. I team operativi beneficiano di applicazioni progettate tenendo conto della gestibilità, rendendole più facili da deployare, gestire e monitorare. Questo beneficio reciproco è un motore chiave dello spirito collaborativo.
Un altro aspetto della filosofia fondamentale è l'accettazione del fallimento, o più accuratamente, trattare i fallimenti come opportunità per imparare e migliorare. Nei sistemi complessi, i fallimenti sono inevitabili. Invece di cercare di assegnare colpe, una cultura DevOps incoraggia un approccio di post-mortem senza colpe (blameless post-mortem), dove l'attenzione è sulla comprensione delle cause profonde di un incidente e sull'implementazione di cambiamenti per prevenire il ripetersi di problemi simili. Questo favorisce la sicurezza psicologica, incoraggiando le persone a sperimentare e innovare senza timore di ritorsioni se le cose vanno storte.
Questo approccio ritorna all'idea di costruire sistemi resilienti. Aspettandosi i fallimenti e progettando sistemi che possano gestirli con grazia (o riprendersi rapidamente da essi), le organizzazioni possono minimizzare l'impatto degli incidenti. Pratiche come i test automatizzati, i rilasci graduali (es. release canary o deployment blue-green) e il monitoraggio robusto contribuiscono tutti a questa resilienza, e sono tutte espressioni della filosofia DevOps sottostante.
Il passaggio verso rilasci più piccoli e frequenti è una conseguenza diretta di questa filosofia. I rilasci grandi e infrequenti sono intrinsecamente rischiosi. Racchiudono molte modifiche insieme, rendendo difficile identificare la causa di eventuali problemi che sorgono. I rilasci piccoli e frequenti, d'altra parte, riducono l'ambito del cambiamento, rendendo i deployment meno rischiosi e la risoluzione dei problemi più semplice. Se si verifica un problema, è più semplice individuarne la causa e fare il rollback di una piccola modifica, se necessario.
Questa capacità di rilasciare piccole modifiche rapidamente e in modo affidabile non solo migliora la stabilità, ma accelera anche il ciclo di feedback dagli utenti. Le aziende possono mettere nuove idee e funzionalità nelle mani dei clienti più velocemente, raccogliere feedback e iterare più rapidamente. Questa agilità è un vantaggio competitivo significativo nel panorama digitale odierno, frenetico.
La filosofia DevOps promuove anche una visione olistica del sistema. Invece di team individuali che ottimizzano il proprio piccolo pezzo del puzzle in isolamento, il DevOps incoraggia tutti a pensare al value stream end-to-end – dall'idea di business iniziale alla consegna del valore al cliente e alla gestione continua del servizio. Questo pensiero sistemico aiuta a identificare ed eliminare i colli di bottiglia che potrebbero verificarsi nei punti di passaggio tra team o fasi diverse.
In definitiva, la filosofia fondamentale del DevOps riguarda il rendere la consegna software più umana e sostenibile. Mira a ridurre lo stress, il burnout e la frustrazione spesso associati agli approcci tradizionali a silos. Favorendo la collaborazione, automatizzando il lavoro noioso e consentendo ai team di fornire valore in modo più efficace, il DevOps può portare a ingegneri più felici, più coinvolti e a un ambiente di lavoro più positivo.
Mentre procedete in questo libro, tenete a mente queste idee fondamentali. Quando discuteremo strumenti o pratiche specifiche, ricordate che sono tutti al servizio di questa filosofia sovrastante. Il "come" del DevOps (strumenti e tecniche) è importante, ma il "perché" (i fondamenti culturali e filosofici) è ciò che guida veramente una trasformazione duratura. Comprendere questo nucleo vi permetterà di guardare oltre il clamore e apprezzare l'impatto profondo che il DevOps può avere su individui, team e intere organizzazioni.
This is a sample preview. The complete book contains 27 sections.