Automazione dei test e pipeline di recapito

Completato

Sono state illustrate la distribuzione e il recapito continui di software e servizi, ma le due procedure in realtà fanno parte di una triade. Le procedure DevOps sono mirate a ottenere integrazione, distribuzione e recapito continui.

A questo punto è giunto il momento di eseguire un backup e discutere della prima di queste, l'integrazione. Questa operazione fa parte del processo di sviluppo che precede la distribuzione. DevOps consiglia una procedura di sviluppo in cui i membri del team integrano spesso il codice in un repository condiviso contenente una codebase singolare "principale" o "trunk". L'obiettivo è quello di fare in modo che tutti contribuiscano al codice che verrà distribuito anziché lavorare alla propria copia e riunire il tutto solo all'ultimo momento.

I test automatizzati possono quindi verificare l'integrazione di ogni membro del team. Questo test aiuta a determinare che il codice sia integro dopo ogni modifica e aggiunta. La fase di test fa parte di quella che viene definita una pipeline. Le pipeline verranno illustrate tra breve dal momento che questa unità sarà incentrata sulle pipeline di test e recapito integrate.

Pipeline di recapito continuo

Per comprendere il ruolo del test automatizzato nel modello di distribuzione di recapito continuo, occorre esaminare il punto in cui si inserisce nella pipeline di recapito. Una pipeline di recapito continuo è l'implementazione del set di passaggi che il codice attraversa quando vengono apportate modifiche durante il processo di sviluppo prima della distribuzione nell'ambiente di produzione. Ecco una rappresentazione grafica dei passaggi di esempio in una pipeline di recapito semplificata:

Diagramma di una pipeline in otto fasi, quattro contrassegnate come integrazione e quattro come distribuzione, con frecce rosse che indicano le fasi di test e revisione

La pipeline verrà ora esaminata in dettaglio.

  • Un'istanza della pipeline ha inizio quando viene eseguito il commit delle modifiche del codice o dell'infrastruttura in un repository di codice, ad esempio usando una richiesta pull.

  • Vengono quindi eseguiti gli unit test successivi (probabilmente i test di integrazione o end-to-end) e idealmente i risultati di questi test vengono comunicati alla parte richiedente.

  • A questo punto ad esempio, il codice nel repository viene analizzato per individuare segreti, vulnerabilità e aspetti della configurazione.

  • Quando tutto è stato estratto, il codice viene compilato e preparato per la distribuzione.

  • Successivamente, il codice viene distribuito in un ambiente di test. Un responsabile potrebbe ricevere una notifica della nuova distribuzione per dare un'occhiata alla soluzione di pre-produzione. Il responsabile potrebbe quindi approvare o non consentire la distribuzione per la produzione, che avvia la parte finale del processo di distribuzione che rilascia il codice nell'ambiente di produzione.

In questa pipeline è possibile visualizzare il delineamento tra integrazione e distribuzione. Le frecce rosse indicano alcuni punti logici in cui è possibile arrestare la pipeline tramite la logica e l'automazione incluse o potenzialmente anche attraverso l'intervento umano.

Strumenti per l'integrazione e il recapito continui: Azure Pipelines

Per usare l'integrazione continua e il recapito continuo, sono necessari gli strumenti appropriati. Azure Pipelines fa parte di Azure DevOps Services che è possibile usare per automatizzare la compilazione e il test del codice in modo coerente. È anche possibile usare Azure Pipelines per distribuire il codice in servizi di Azure, macchine virtuali e altre destinazioni nel cloud e in locale.

L'input per una pipeline (codice o configurazioni) risiede in un sistema di controllo della versione come GitHub o un altro provider Git.

Azure Pipelines viene eseguito in un componente di calcolo, come una macchina virtuale o un contenitore, e offre agenti di compilazione che eseguono Windows, Linux e macOS. Offre inoltre l'integrazione con i plug-in di test, sicurezza e qualità del codice. Infine, è facilmente estendibile, in modo da poter portare l'automazione in Azure Pipelines.

Le pipeline vengono definite usando la sintassi YAML o tramite l'interfaccia utente classica nel portale di Azure. Quando si usa un file YAML, è possibile archiviarlo insieme al codice. Sono anche disponibile modelli utilizzabili per creare facilmente le pipeline, ad esempio una pipeline che compila un'immagine Docker o un progetto Node.js. È anche possibile riutilizzare un file YAML esistente.

Indipendentemente dal fatto che si usi un file YAML o l'interfaccia classica, ecco i passaggi principali:

  1. Configurare Azure Pipelines per l'uso del repository Git.
  2. Definire la compilazione modificando il file azure-pipelines.yml o usando l'editor classico.
  3. Eseguire il push del codice nel repository di controllo della versione. Questa azione attiva la pipeline per la compilazione e il test del codice.

Una volta che il codice è stato aggiornato, compilato e testato, è possibile distribuirlo nella destinazione desiderata.

Alcune funzionalità, come l'esecuzione di processi contenitore, sono disponibili solo quando si usa YAML, mentre altre, ad esempio i gruppi di attività, sono disponibili solo tramite l'interfaccia classica.

Creazione della pipeline di Azure

Le pipeline sono strutturate in:

  • Processi: un processo è un raggruppamento di attività o passaggi eseguiti su un singolo agente di compilazione. Un processo è il componente di lavoro più piccolo di cui è possibile pianificare l'esecuzione. Tutti i passaggi in un processo vengono eseguiti in sequenza. Questi passaggi possono essere qualsiasi tipo di azione desiderata, tra cui compilazione di software, preparazione di dati di esempio per la fase di test, esecuzione di test specifici e così via.

  • Fasi: una fase è un raggruppamento logico di processi correlati.

Ogni pipeline ha almeno una fase. Usare più fasi per organizzare la pipeline in divisioni principali e contrassegnare i punti della pipeline in cui è possibile sospendere ed eseguire i controlli.

Le pipeline possono essere semplici o complesse a seconda delle esigenze. Sono disponibili alcune utili esercitazioni sulla costruzione e l'uso delle pipeline nell'ambito del percorso di apprendimento Compilare applicazioni tramite Azure DevOps.

Tracciabilità dell'ambiente

C'è un altro aspetto delle pipeline correlato all'affidabilità che vale la pena menzionare. Le pipeline possono essere create in modo da correlare gli elementi in esecuzione nell'ambiente di produzione con un'istanza di compilazione specifica. Idealmente, dovrebbe essere possibile ricondurre una compilazione a una richiesta pull o a una modifica del codice specifica. Questa funzionalità può essere estremamente utile in caso di evento imprevisto o in seguito, durante la revisione post-evento imprevisto quando si tenta di identificare la modifica che ha contribuito al problema. Con alcuni sistemi CI/CD, come Azure Pipelines, eseguire questa operazione è semplice, mentre altri richiedono la creazione manuale di una pipeline che propaghi una sorta di "ID compilazione" in tutte le fasi.

Verificare le conoscenze

1.

Commit, test, analisi e compilazione sono i passaggi tipici di quale degli elementi seguenti?

2.

La tracciabilità dell'ambiente consente di eseguire quale delle operazioni seguenti?