Sviluppo software

DevOps in pratica: dal codice alla produzione

Illustrazione: il ciclo DevOps dal codice al monitoraggio

DevOps è un insieme di pratiche, strumenti e abitudini che avvicina chi sviluppa il software (Dev) e chi lo gestisce in produzione (Ops). L’obiettivo è facile da dire: portare una modifica dal computer di uno sviluppatore agli utenti in modo rapido, ripetibile e sicuro.

Per chi decide in azienda conta meno l’elenco degli strumenti e più il percorso. Ogni modifica, che sia una nuova funzione o la correzione di un errore, segue sempre la stessa strada, controllata dalle macchine dove possibile e dalle persone dove serve. Quando questa strada esiste, rilasciare smette di essere un evento e diventa routine.

Qui la seguiamo tappa per tappa, con gli strumenti più diffusi e qualche esempio dai nostri progetti.

Il codice passa per branch e merge, supera i test automatici, diventa un’immagine container, viene rilasciato nel cloud ed è seguito dal monitoraggio delle metriche.

Versioni: branch e pull request

Tutto parte da Git, il sistema di controllo delle versioni. Ogni modifica nasce in un branch, una linea di lavoro separata, e torna nel ramo principale con una pull request (merge request in GitLab): una richiesta di integrazione che un collega rivede prima di approvarla. Il ramo principale è protetto, nessuno ci scrive direttamente, e le modifiche restano piccole, così la revisione è reale e non una formalità.

Questo ritmo si sposa con quello degli sprint, che descriviamo nel nostro articolo su Agile Scrum: ogni storia diventa una o più modifiche piccole, revisionate e integrate presto.

Integrazione continua: i controlli automatici

La CI (continuous integration, integrazione continua) è una pipeline, cioè una sequenza di passi automatici, che parte a ogni modifica proposta:

  1. Build: compila il progetto e ne risolve le dipendenze.
  2. Test: unitari, di integrazione e, dove servono, end-to-end sull’interfaccia.
  3. Qualità: linter e analisi statica, per esempio con SonarQube, con soglie che bloccano il merge.
  4. Sicurezza: scansione del codice (per esempio con Semgrep), delle librerie con vulnerabilità note e dei segreti finiti per errore nel repository.

Se un passo fallisce, la modifica non entra. Gli strumenti più diffusi sono GitHub Actions, GitLab CI/CD e Jenkins; in tutti la pipeline è descritta in un file che vive nel repository insieme al codice, quindi è versionata e revisionata come il resto.

Container: lo stesso pacchetto in ogni ambiente

Superati i controlli, la pipeline crea un’immagine container: un pacchetto, di solito costruito con Docker, che contiene l’applicazione con tutto ciò che le serve per girare. L’immagine si costruisce una volta sola, riceve un’etichetta legata alla versione e viene salvata in un registro; poi la stessa immagine passa dal collaudo alla produzione. È la fine del classico “sul mio computer funziona”.

I container non sono solo cloud: nell’ERP per le gare di Atac, sviluppato per Ernst & Young, ogni microservizio gira in un container Docker sul sistema on-premise del cliente.

Rilascio automatico negli ambienti

Il rilascio continuo (continuous delivery) porta l’immagine negli ambienti, di solito sviluppo, collaudo e produzione, con la stessa procedura automatica. Dove i servizi sono molti e devono scalare si usa spesso Kubernetes, che distribuisce i container sui server, li riavvia se cadono e aggiorna le versioni un po’ alla volta; in altri casi bastano i servizi gestiti dei cloud provider o un singolo server con Docker. La scelta dipende dal progetto, non dall’abitudine.

Due esempi dai nostri lavori. In 2VitaBCognitive per Atlantia il rilascio dei 6 microservizi passa da AWS CodeCommit, CodePipeline e CodeDeploy, e i servizi girano in container Docker su Amazon ECS. In ATS, il nostro sistema di selezione del personale, GitHub Actions porta il codice in Docker sul server, dietro Caddy, con backup e ripristino automatico.

Infrastruttura come codice

Anche server, reti e database si descrivono in file versionati. Con Terraform (o il suo fork open source OpenTofu) si dichiarano le risorse cloud, con Ansible si configurano i server. Il vantaggio è concreto: gli ambienti si ricreano identici, le modifiche all’infrastruttura passano dalla revisione come il codice e, dopo un guasto, si riparte da una descrizione nota e non dalla memoria di qualcuno.

Monitoraggio, allarmi e rollback

Il lavoro non finisce con il rilascio. Prometheus raccoglie le metriche (tempi di risposta, errori, uso delle risorse), Grafana le mostra in cruscotti e gli allarmi avvisano il team quando una soglia viene superata, possibilmente prima che se ne accorgano gli utenti. I log centralizzati aiutano poi a capire cosa è successo.

Quando un rilascio va male serve il rollback, cioè il ritorno alla versione precedente. Con le immagini versionate basta rimettere in servizio quella di prima; il punto delicato sono i dati, quindi le modifiche al database vanno pensate per restare compatibili con la versione precedente almeno per un rilascio.

La parte che non si automatizza

DevOps è prima di tutto un modo di lavorare:

  • Rilasci piccoli e frequenti: una modifica piccola si rivede meglio, si prova meglio e, se serve, si annulla in fretta.
  • Responsabilità condivisa: chi sviluppa segue anche il comportamento in produzione, e chi gestisce l’infrastruttura partecipa alle scelte di progetto.
  • Analisi senza colpevoli: dopo un incidente si cerca la causa nel processo, non una persona da accusare, e si aggiunge un controllo perché non si ripeta.
  • Misure condivise: le ricerche DORA (DevOps Research and Assessment) hanno reso comuni indicatori come la frequenza dei rilasci, il tempo dalla modifica alla produzione, la quota di rilasci che causano problemi e il tempo di ripristino.

Se volete costruire o rivedere la strada che porta il vostro codice in produzione, o affiancare al vostro un team che lavora già così, parliamone.

Contattaci

Hai un progetto da realizzare? Parliamone insieme.

Contattaci per una consulenza strategica per trasformare le tue idee in successi concreti.

Chiama subito: +39 081 526 9325

Benefici per te

  • Oltre 20 sviluppatori esperti
  • Metodologia Agile SCRUM
  • Microservizi e container
  • Cloud AWS e Azure
  • Team dedicati
  • Codice su misura

Cosa succede dopo?

  1. Pianifichiamo una chiamata a tuo piacimento
  2. Facciamo un incontro di scoperta e consulenza
  3. Prepariamo una proposta

Fissa una consulenza

I campi contrassegnati con * sono obbligatori.