Cos'è il ciclo di vita di DevOps?

Ciclo di vita DevOps, definito

Il ciclo di vita DevOps è un processo continuo e iterativo per lo sviluppo e l'implementazione del software, composto da otto fasi chiave: pianificazione, codifica, costruzione, test, rilascio, distribuzione, operazione e monitoraggio.

Il processo DevOps descrive come il software si sposta dall'ideazione, attraverso la produzione e il feedback, e ritorna all'ideazione, con i team di sviluppo e operazioni che lavorano come un'unica unità collaborativa. Comprende un flusso end-to-end di pratiche e workflow di automazione che i team DevOps possono utilizzare per pianificare, sviluppare, eseguire e ottimizzare i rilasci software.

Le fasi del ciclo di vita DevOps vengono spesso rappresentate come parte di un "ciclo infinito", con le attività di sviluppo a sinistra e le attività di operazioni a destra, collegate in un unico percorso continuo.

DevOps infinity loop

Sul lato "pianifica → codifica → creazione → test", i team perfezionano i requisiti software in piccole storie utente, eseguono il commit del codice nei repository di codice in modo incrementale (ma frequentemente) e utilizzano strumenti di integrazione continua (CI) per creare e testare automaticamente ogni codice cambiamento.

Nella fase "rilascio → implementazione → gestione → monitoraggio", i workflow di automazione propagano le modifiche attraverso gli ambienti IT fino agli utenti. Nel frattempo, gli strumenti di observability monitorano lo stato di salute del sistema, le prestazioni del software e il comportamento degli utenti per rilevare i problemi e misurare l'impatto complessivo.

Il ciclo infinito sottolinea che ogni fase del ciclo di vita DevOps influenza le altre. I team condividono lavoro, conoscenze e responsabilità, invece di passarli da uno all'altro tra i silos. Il ciclo illustra anche come i workflow DevOps possono semplificare i processi di distribuzione e ottimizzazione del software. Idealmente, ogni ciclo sarà più veloce, sicuro e automatizzato rispetto al precedente.

In questo modo, il ciclo di vita DevOps consente alle aziende di allineare persone, processi e strumenti per fornire applicazioni software di alta qualità ed esperienze utente fluide.

Fasi del ciclo di vita di DevOps

Ogni fase del ciclo di vita DevOps informa e si sovrappone alle altre fasi, ma ognuna ha uno scopo chiaro e un insieme di attività associate. Le fasi includono:

Pianificazione

Nella fase di pianificazione, i team DevOps traducono le esigenze aziendali e il feedback degli utenti in piani di lavoro chiari, con priorità definite e con tempi limitati e workflow di gestione dei progetti che guidano le attività di sviluppo e operazioni nelle fasi successive. Questa fase chiarisce la visione, l'ambito e la roadmap per una release software o una build di sistema, così che tutti comprendano cosa stanno costruendo, perché è importante e come misurare il successo.

Le attività di pianificazione tipiche possono includere:

  • Affinare e gestire i backlog dei prodotti (come nuove caratteristiche, correzioni e debiti tecnici).
  • Analisi dell'input degli stakeholder per catturare i bisogni e i vincoli degli utenti.
  • Suddividere il lavoro in compiti, user stories (descrizioni delle caratteristiche software scritte dal punto di vista dell'utente) e epics (user stories troppo ampie per essere affrontate in una singola iterazione software) per stimare i requisiti delle risorse e identificare dipendenze.
  • Definire gli indicatori chiave di prestazione (KPI), gli indicatori del livello di servizio (SLI) e gli obiettivi del livello di servizio, in modo che le fasi successive sappiano cosa significa "buono".

Codice

Durante la fase di programmazione, gli sviluppatori trasformano l'infrastruttura pianificata e i requisiti software in codice sorgente funzionante con l'attenzione alla garanzia della qualità e alle operazioni future. Non si tratta solo di scrivere nuovo codice. Si tratta anche di impostare tutti i componenti necessari per i processi automatizzati di build, test, integrazione e implementazione più avanti nella pipeline.

Il processo di codifica prevede:

  • Scrivere codice per implementare nuove funzionalità, correggere correzioni e affrontare indirizzo non funzionali (ad esempio la sicurezza).
  • Commettere piccole modifiche incrementali del codice in repository condivisi all'interno di sistemi di controllo di versione (come Git e GitHub) per le recensioni.
  • Testare i commit del codice in modo che possano essere creati e integrati senza problemi con la base di codice.
  • Aggiungere o aggiornare test unitari e componenti automatici affinché future esecuzioni CI possano convalidare automaticamente il comportamento del codice dopo ogni commit.

Build

Nella fase di costruzione, le modifiche al codice sorgente vengono automaticamente compilate, validate e confezionate in artefatti di build implementabili. Gli strumenti DevOps recuperano le modifiche al codice dal sistema di controllo versioni, eseguono controlli automatici e producono pacchetti (come immagini Docker container e binari compilati) versionati e pronti per la distribuzione/implementazione o ulteriori test.

Più specificamente:

  • Gli script automatici e gli strumenti di compilazione compilano il codice sorgente, risolvono e scaricano le dipendenze (comprese le librerie, i framework e i moduli) e collegano tutto in un eseguibile o in un'immagine.
  • Test automatizzati di base vengono eseguiti come parte della build. Se la build fallisce, viene contrassegnata come non funzionante e rimane nella fase di build. Se la build viene superata, si passa alla fase successiva del ciclo di vita.

Prova

La fase di test, chiamata anche convalida, mira a garantire che una modifica del codice si comporti come previsto in condizioni reali. I team DevOps utilizzano una serie di strumenti di test avanzati per convalidare continuamente che ogni modifica sia funzionale, sicura e performante prima che si sposti ulteriormente nella pipeline o raggiunga la produzione.

Tipicamente, i processi di testing sono strettamente integrati nella pipeline di integrazione continua/consegna continua (CI/CD), così gli sviluppatori ricevono feedback rapidi e frequenti sulla qualità del codice.

L'obiettivo principale dei test software è individuare i difetti il prima possibile (quando sono più economici e facili da correggere) e prevenire che build difettose progrediscano verso il rilascio. I test verificano anche che le nuove modifiche non interromperanno le funzionalità esistenti, aiutando gli sviluppatori a mantenere la stabilità complessiva del sistema man mano che i prodotti software si evolvono.

Rilascio

La fase di rilascio fornisce un gateway controllato tra "build test" e "implementazione live", in cui le modifiche al codice vengono approvate per la produzione e rese visibili agli utenti target. I team di sviluppo preparano codice collaudato e testato per la distribuzione confezionandolo, validando che sia pronto per la produzione e coordinando come e quando spostare agli ambienti di staging e produzione.

I processi di rilascio più comuni includono:

  • Effettuare controlli finali di qualità, sicurezza e conformità rispetto a criteri di accettazione predefiniti.
  • Allegare artefatti di build a versioni specifiche di release e creare change log e documentazione.
  • Identificare vulnerabilità nel prossimo rilascio e pianificare strategie di mitigazione (come i rollback) per affrontare i problemi.

Implementazione

Durante la fase di implementazione, il codice testato e confezionato viene automaticamente consegnato agli ambienti di destinazione (staging o produzione). Gli strumenti di gestione della configurazione e infrastruttura come codice (IaC), che utilizzano file di configurazione e linguaggi di codifica descrittivi di alto livello per automatizzare il provisioning e l'orchestrazione dell'infrastruttura per i rilasci software, aiutano i team DevOps a garantire che il software venga consegnato in modo affidabile e ripetibile.

L'implementazione è tipicamente guidata da piattaforme di consegna continua (CD) e containerizzazione (ad esempio Kubernetes) che orchestrano i processi di distribuzione software (estrazione di artefatti di build, aggiornamento di container e binari, esecuzione di test finali e passaggio al traffico alla nuova versione).

I team DevOps utilizzano spesso strategie di implementazione diverse per assicurarsi che le nuove versioni vengano introdotte gradualmente e possano essere ripristinate rapidamente, se necessario.

Con la distribuzione blue-green, ad esempio, le app vengono distribuite in due ambienti di produzione parallela, e ciascun ambiente esegue una versione diversa dell'applicazione. L'ambiente "blue" esegue l'applicazione live, mentre l'ambiente "green" gestisce i test e la convalida delle nuove versioni dell'app. Quando la nuova iterazione passa, l'ambiente green diventa l'ambiente reale, e il blue rimane inattivo ma disponibile per gestire i rollback.

Con le implementazioni canary, i team distribuiscono le applicazioni a un piccolo sottoinsieme di utenti, o "canarini", per il monitoraggio e il test dell'ambiente in tempo reale prima di distribuire l'app all'intera base di utenti.

Proprio come i canarini venivano usati per avvertire i minatori di carbone della presenza di gas tossici, le implementazioni canary avvisano i team di sviluppo dei difetti delle app senza il rischio di problemi di prestazioni su larga scala che colpirebbero tutti gli utenti. Se l'applicazione funziona bene con il gruppo canary, gli sviluppatori la estendono progressivamente a gruppi più grandi, fino a renderla disponibile a tutti gli utenti.

Operatività

La fase operativa si concentra sul mantenere i sistemi attivi stabili, performanti, sicuri e disponibili per utenti reali sotto workload reali. Non è la "fine" del ciclo di vita dell'applicazione. Piuttosto, reinserisce dati e insight nelle fasi precedenti.

In questa fase, i team DevOps:

  • Eseguono e supervisionano le applicazioni nell'ambiente di produzione, compresi i servizi di infrastruttura e le dipendenze associate.
  • Gestiscono i processi di pianificazione e scalabilità della capacità in modo che i flussi di traffico non si deteriorino nel tempo.
  • Rilevano e valutano i problemi, risolvono i colli di bottiglia delle prestazioni e applicano correzioni di bug o rollback secondo necessità.
  • Applicano patch di sicurezza e pratiche di governance (come controlli di accesso e audit di conformità) per ottimizzare la sicurezza del sistema.

Monitoraggio

Nella fase di monitoraggio, i team osservano continuamente applicazioni e infrastrutture in produzione per rilevare problemi, comprendere il comportamento reale degli utenti e inviare insight sullo sviluppo e le operazioni.

I team DevOps raccolgono dati di observability (metriche, log e tracce) e altre informazioni da app, server, reti e database per monitorare le prestazioni in tempo reale. Impostano soglie e allerti in modo che anomalie (come elevata latenza delle API o schemi di accesso sospetti) attivino notifiche per un'indagine rapida e una correzione.

Se gli strumenti di monitoraggio rilevano un difetto del software o un problema di usabilità, inoltrano le informazioni ai tracker dei problemi e ai backlog, in modo che i team possano modificare le iterazioni successive.​

DevSecOps: la "nona fase"

Il ciclo infinito non include esplicitamente una fase "sicura", tuttavia le pipeline DevOps spesso comportano pratiche e tecnologie che incorporano misure di sicurezza durante tutto il ciclo di vita.

Ed è qui che entra in gioco il DevSecOps framework.

DevSecOps, abbreviazione di sviluppo, sicurezza e operazioni, è una pratica di sviluppo software che sposta i protocolli di sicurezza da destra (fine) a sinistra (inizio) del ciclo di vita dello sviluppo. Con shift-left, gli sviluppatori implementano protocolli di sicurezza (come la crittografia dei dati, la validazione degli input, i controlli di accesso basati sui ruoli e l'autenticazione a più fattori) mentre scrivono codice.

DevSecOps incorpora anche attività di "shift right", estendendo le pratiche di sicurezza agli ambienti di produzione post-implementazione. Le pratiche di shift-right danno priorità al monitoraggio, al test e alla protezione delle applicazioni in tempo di esecuzione e in condizioni reali. Completano la sicurezza shift-left, creando un ciclo di feedback continuo in cui i problemi di sicurezza scoperti in produzione informano le fasi di sviluppo precedenti.

Utilizzate congiuntamente, la sicurezza shift-left e shift-right consentono alle aziende di integrare i controlli di sicurezza in ogni fase del ciclo di vita DevOps. Una doppia strategia di sicurezza "shift-anywhere" aiuta i team DevOps a implementare sia la prevenzione precoce che il rilevamento e la risposta alle minacce dopo la distribuzione/implementazione, migliorando la situazione generale di livello di sicurezza e promuovendo il miglioramento continuo.

DevOps vs. waterfall vs. agile

Il ciclo di vita DevOps rappresenta un'evoluzione degli approcci più tradizionali allo sviluppo software, come waterfall e agile.

Pipeline di sviluppo waterfall

Waterfall è una metodologia di sviluppo che segue un processo lineare e sequenziale in cui ogni fase del ciclo di vita (raccolta dei requisiti, progettazione, implementazione, test, distribuzione e manutenzione) deve essere completata e approvata completamente prima che inizi la successiva. Dà priorità alla pianificazione proattiva, alla documentazione dettagliata e alla prevedibilità, rendendolo adatto a progetti con requisiti stabili e ben definiti e pochi cambiamenti previsti (ad esempio progetti governativi e sanitari).

Waterfall offre un forte controllo dei processi, ma i team di sviluppo sono isolati. Apportare modifiche dopo il completamento di una fase è costoso e richiede tempo. In breve, waterfall ha problemi di agilità.

Agile è una metodologia di sviluppo iterativa che fornisce piccoli incrementi funzionali di lavoro attraverso cicli brevi (noti come "sprint"). Dà priorità alla pianificazione adattiva, alla consegna anticipata e al miglioramento continuo basato sul feedback degli stakeholder, consentendo ai team di sviluppo di rispondere rapidamente ai requisiti e alle condizioni in continua evoluzione.

Pipeline di sviluppo Agile

Le metodologie agili possono rivelarsi efficaci per ambienti dinamici, come le startup. Mitigano la rigidità lineare degli approcci a cascata con team trasversali che danno priorità alla funzionalità software rispetto a una documentazione completa. Tuttavia, gli approcci agili si concentrano sul processo di sviluppo del software, escludendo i processi operativi.  

DevOps offre una pratica culturale e tecnica moderna che integra i team di sviluppo e operazioni, sfruttando strumenti CI/CD (come GitLab) per test, distribuzione e automazione di monitoraggio. A differenza dell'Agile e dello waterfall, le pratiche DevOps possono aiutare le aziende ad accelerare i rilasci software e a costruire applicazioni che rimangano performanti e agili nelle architetture di microservizi altamente dinamiche e negli ambienti IT basati su cloud di oggi.

Le 7 C (processi continui) del ciclo di vita DevOps

Le 7 C offrono un altro modo per concettualizzare il ciclo di vita DevOps come il prodotto di sette processi continui.

1. Sviluppo continuo

Lo sviluppo continuo prevede la pianificazione e la codifica del software, con gli sviluppatori che suddividono il processo in iterazioni più piccole e gestibili. Gli sviluppatori memorizzano le modifiche nei sistemi di controllo delle versioni e allineano continuamente il loro codice ai requisiti degli stakeholder, aiutando i team a ridurre al minimo i rischi e ad adattarsi rapidamente alle modifiche.

2. Integrazione continua

L'integrazione continua unisce le modifiche di codice di più sviluppatori in un repository condiviso, attivando automaticamente le build dopo ogni commit. Permette ai team DevOps di migliorare continuamente le proprie applicazioni software, ricevere feedback costanti, individuare e correggere errori prima che influenzino le prestazioni del software e fornire software di qualità superiore su tempi più prevedibili.

3. Test continui

Il test continuo consente agli sviluppatori di avviare automaticamente le recensioni del codice e i protocolli di test (come i test unitari). Utilizza strumenti di test per esaminare continuamente il codice integrato alla ricerca di bug, difetti di usabilità e problemi di prestazioni. I test continui offrono agli sviluppatori il feedback rapido di cui hanno bisogno per migliorare il software senza ritardarne il ciclo di vita.

4. Distribuzione e implementazione continue

La consegna continua automatizza la consegna delle applicazioni e delle modifiche validate alla base di codice (aggiornamenti, correzioni di bug e persino nuove caratteristiche) a tutti gli ambienti infrastrutturali necessari per ulteriori test. Le build di codice che superano tutti i test di integrazione e le fasi di validazione vengono confezionate e consegnate a repository di codice, che centralizzano e memorizzano i pacchetti di codice in uno stato deployabile.

La distribuzione continua porta un passo oltre implementando automaticamente ogni modifica approvata in produzione, senza intervento umano. Quando gli aggiornamenti del codice vengono testati, validati e approvati, gli strumenti di distribuzione continua spostano l'artefatto software in un ambiente di staging pre-produzione o su server pubblici e piattaforme di distribuzione (come gli store applicazioni) dove gli utenti possono accedervi.

5. Feedback continuo

Il feedback continuo richiede ai team DevOps di raccogliere insight dai dati di monitoraggio, dall'esperienza utente e dai contributi degli stakeholder per affinare il backlog del prodotto e determinare l'urgenza di ogni miglioramento.

6. Monitoraggio continuo

Il monitoraggio continuo tiene traccia delle prestazioni delle applicazioni e dell'infrastruttura in tempo reale, identificando i problemi in modo proattivo per mantenere l'affidabilità del sistema. La maggior parte degli strumenti di monitoraggio visualizza i dati della pipeline CI/CD utilizzando dashboard, che aumentano la visibilità dello stack tecnologico e consentono ottimizzazioni basate sui dati.

7. Operazioni continue

Gli strumenti di automazione gestiscono il provisioning dell'infrastruttura, la scalabilità delle risorse, i backup dei dati, l'instradamento del traffico e la manutenzione del sistema, permettendo ai team DevOps di applicare continuamente feedback alle nuove iterazioni delle app.

I benefici del ciclo di vita DevOps

Sfruttare le best practice di DevOps può avere numerosi benefici per le aziende, tra cui:

Migliore qualità del software

I cicli di vita DevOps danno la priorità ai test continui del codice e del software, in modo che i bug e le vulnerabilità vengano individuati nelle prime fasi del processo di sviluppo e gli sviluppatori possano fornire codice di qualità superiore.

Tempi di commercializzazione più rapidi

I processi DevOps accelerano i cicli di sviluppo del software, riducendo il tempo di attesa tra l'integrazione del codice e la consegna del software da settimane a minuti.

Meno rischi e tempi di inattività

Piccoli e frequenti aggiornamenti del codice rendono più facile risolvere bug ed errori, prevenendo interruzioni su larga scala e riducendo tempo medio di riparazione (MTTR).

Maggiore trasparenza

I dashboard di observability e i feedback loops continui aiutano a garantire che ogni membro del team DevOps abbia accesso a tutte le informazioni di cui ha bisogno in ogni momento, migliorando la trasparenza e la responsabilità in tutta l'azienda.

Aumento della produttività

La cultura DevOps automatizza i passaggi manuali e ripetitivi (ad esempio la risoluzione di build e la gestione degli script di distribuzione), così i team possono concentrarsi sull'ottimizzazione delle applicazioni per gli utenti finali.

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Soluzioni correlate
IBM Instana Observability

Sfrutta la potenza dell'AI e dell'automazione per risolvere in modo proattivo i problemi in tutto lo stack di applicazioni.

Esplora IBM Instana Observability
Soluzioni DevOps

Utilizza il software e gli strumenti DevOps per creare, implementare e gestire app cloud-native su più dispositivi e ambienti.

Esplora le soluzioni DevOps
Servizi di consulenza cloud

Accelera l'agilità e la crescita della tua azienda. Modernizza costantemente le applicazioni su tutte le tue piattaforme usufruendo dei nostri servizi di consulenza per il cloud.

Esplora i servizi di consulenza cloud
Fasi successive

Dal rilevamento proattivo dei problemi con IBM Instana alle analisi in tempo reale su tutto il tuo stack, puoi mantenere le applicazioni cloud-native in esecuzione in modo affidabile.

  1. Scopri IBM Instana
  2. Esplora le soluzioni DevOps