Architettura di base CI/CD con Azure Pipelines

Questo articolo descrive un flusso di lavoro DevOps di alto livello per la distribuzione delle modifiche dell'applicazione negli ambienti di gestione temporanea e produzione in Azure. La soluzione usa procedure di integrazione continua/distribuzione continua (CI/CD) con Azure Pipelines.

Importante

Questo articolo illustra un'architettura CI/CD generale con Azure Pipelines. Non è progettato per coprire le specifiche della distribuzione in ambienti diversi, ad esempio servizi app Azure, Macchine virtuali e Azure Power Platform. Le specifiche della piattaforma di distribuzione sono descritte in articoli separati.

Architettura

Diagramma dell'architettura di una pipeline CI/CD con Azure Pipelines.

Scaricare un file di Visio di questa architettura.

Nota

Anche se questo articolo illustra CI/CD per le modifiche dell'applicazione, Azure Pipelines può essere usato anche per compilare pipeline CI/CD per le modifiche dell'infrastruttura come codice (IaC).

Flusso di dati

Il flusso dei dati nello scenario avviene come segue:

  1. Pipeline di richiesta pull: una richiesta pull in Azure Repos Git attiva una pipeline di richiesta pull. Questa pipeline esegue controlli di qualità rapidi. Questi controlli devono includere:

    • Compilazione del codice, che richiede il pull delle dipendenze da un sistema di gestione delle dipendenze.
    • Uso di strumenti per analizzare il codice, ad esempio analisi statica del codice, linting e analisi della sicurezza
    • Unit test

    Se uno dei controlli ha esito negativo, l'esecuzione della pipeline termina e lo sviluppatore dovrà apportare le modifiche necessarie. Se tutti i controlli vengono superati, la pipeline deve richiedere una revisione della richiesta pull. Se la verifica della richiesta pull ha esito negativo, la pipeline termina e lo sviluppatore dovrà apportare le modifiche necessarie. Se vengono superati tutti i controlli e le revisioni delle richieste pull, la richiesta pull verrà eseguita correttamente.

  2. Pipeline CI: un'unione in Azure Repos Git attiva una pipeline CI. Questa pipeline esegue gli stessi controlli della pipeline di richiesta pull con alcune aggiunte importanti. La pipeline CI esegue test di integrazione. Questi test di integrazione non devono richiedere la distribuzione della soluzione, perché gli artefatti di compilazione non sono ancora stati creati. Se i test di integrazione richiedono segreti, la pipeline ottiene tali segreti da Azure Key Vault. Se uno dei controlli ha esito negativo, la pipeline termina e lo sviluppatore dovrà apportare le modifiche necessarie. Il risultato di un'esecuzione corretta di questa pipeline è la creazione e la pubblicazione di artefatti di compilazione

  3. Trigger della pipeline CD: la pubblicazione di artefatti attiva la pipeline cd.

  4. Rilascio della distribuzione continua nella gestione temporanea : la pipeline cd scarica gli artefatti di compilazione creati nella pipeline CI e distribuisce la soluzione in un ambiente di staging. La pipeline esegue quindi test di accettazione sull'ambiente di gestione temporanea per convalidare la distribuzione. Se un test di accettazione ha esito negativo, la pipeline termina e lo sviluppatore dovrà apportare le modifiche necessarie. Se i test hanno esito positivo, è possibile implementare un'attività di convalida manuale per richiedere a una persona o a un gruppo di convalidare la distribuzione e riprendere la pipeline.

  5. Rilascio cd in produzione : se l'intervento manuale viene ripreso o non è implementato alcun intervento manuale, la pipeline rilascia la soluzione nell'ambiente di produzione. La pipeline deve eseguire smoke test nell'ambiente di produzione per assicurarsi che il rilascio funzioni come previsto. Se un passaggio di intervento manuale genera un annullamento, la versione non riesce o i test di fumo hanno esito negativo, viene eseguito il rollback della versione, la pipeline termina e lo sviluppatore dovrà apportare le modifiche necessarie.

  6. Monitoraggio : Monitoraggio di Azure raccoglie dati di osservabilità, ad esempio log e metriche, in modo che un operatore possa analizzare i dati di integrità, prestazioni e utilizzo. Application Insights raccoglie tutti i dati di monitoraggio specifici dell'applicazione, ad esempio le tracce. Azure Log Analytics viene usato per archiviare tutti i dati.

Componenti

  • Un repository Git di Azure Repos funge da repository di codice che fornisce il controllo della versione e una piattaforma per i progetti collaborativi.

  • Azure Pipelines consente di compilare, testare, creare pacchetti e rilasciare il codice dell'applicazione e dell'infrastruttura. Questo esempio ha tre pipeline distinte con le responsabilità seguenti:

    • Le pipeline pr convalidano il codice prima di consentire a una richiesta pull di eseguire il merge tramite linting, compilazione e unit test.
    • Le pipeline CI vengono eseguite dopo il merge del codice. Eseguono la stessa convalida delle pipeline di richiesta pull, ma aggiungono test di integrazione e pubblicano artefatti di compilazione se tutto ha esito positivo.
    • Le pipeline cd distribuiscono artefatti di compilazione, eseguono test di accettazione e rilasciano nell'ambiente di produzione.
  • I feed di Azure Artifact consentono di gestire e condividere pacchetti software, ad esempio Maven, npm e NuGet. I feed di artefatti consentono di gestire il ciclo di vita dei pacchetti, inclusi il controllo delle versioni, l'innalzamento di livello e il ritiro dei pacchetti. Ciò consente di assicurarsi che il team usi le versioni più recenti e sicure dei pacchetti.

  • Key Vault consente di gestire i dati sicuri per la soluzione, inclusi segreti, chiavi di crittografia e certificati. In questa architettura viene usato per archiviare i segreti dell'applicazione. Questi segreti sono accessibili tramite la pipeline. È possibile accedere ai segreti da Azure Pipelines con un'attività di Key Vault o collegando segreti da Key Vault.

  • Monitoraggio è una risorsa osservabile che raccoglie e archivia metriche e log, dati di telemetria delle applicazioni e metriche della piattaforma per i servizi di Azure. Usare questi dati per monitorare l'applicazione, configurare avvisi, dashboard ed eseguire l'analisi delle cause radice degli errori.

  • Application Insights è un servizio di monitoraggio che fornisce informazioni dettagliate in tempo reale sulle prestazioni e sull'utilizzo delle applicazioni Web.

  • L'area di lavoro Log Analytics offre una posizione centrale in cui è possibile archiviare, eseguire query e analizzare i dati da più origini, tra cui risorse, applicazioni e servizi di Azure.

Alternative

Anche se questo articolo è incentrato su Azure Pipelines, è possibile prendere in considerazione queste alternative:

  • Azure DevOps Server (noto in precedenza come Team Foundation Server ) può essere usato come sostituto locale.

  • Jenkins è uno strumento open source usato per automatizzare compilazioni e distribuzioni.

  • GitHub Actions consente di automatizzare i flussi di lavoro CI/CD direttamente da GitHub.

  • I repository GitHub possono essere sostituiti come repository di codice. Azure Pipelines si integra perfettamente con i repository GitHub.

Questo articolo è incentrato sulle procedure ci/cd generali con Azure Pipelines. Di seguito sono riportati alcuni ambienti di calcolo in cui è possibile prendere in considerazione la distribuzione:

  • servizio app s è un servizio basato su HTTP per l'hosting di applicazioni Web, API REST e back-end per dispositivi mobili. È possibile sviluppare nel linguaggio preferito e le applicazioni vengono eseguite e ridimensionate con facilità in ambienti basati su Windows e Linux. App Web supporta slot di distribuzione come staging e produzione. È possibile distribuire un'applicazione in uno slot di staging e rilasciarla nello slot di produzione.

  • Azure Macchine virtuali gestisce i carichi di lavoro che richiedono un livello elevato di controllo o dipendono da componenti e servizi del sistema operativo che non sono possibili con App Web (ad esempio, La gac di Windows o COM).

  • Azure Power Platform è una raccolta di servizi cloud che consentono agli utenti di creare, distribuire e gestire applicazioni senza la necessità di infrastruttura o competenze tecniche.

  • Funzioni di Azure è una piattaforma di calcolo serverless che è possibile usare per compilare applicazioni. Con Funzioni è possibile usare trigger e associazioni per integrare i servizi. Le funzioni supportano anche slot di distribuzione come staging e produzione. È possibile distribuire un'applicazione in uno slot di staging e rilasciarla nello slot di produzione.

  • servizio Azure Kubernetes (AKS) è un cluster Kubernetes gestito in Azure. Kubernetes è una piattaforma di orchestrazione dei contenitori open source.

  • App Azure Container consente di eseguire applicazioni in contenitori in una piattaforma serverless.

Dettagli dello scenario

L'uso di procedure CI e CD comprovate per distribuire le modifiche all'applicazione o all'infrastruttura offre diversi vantaggi, tra cui:

  • Cicli di rilascio più brevi: i processi CI/CD automatizzati consentono di distribuire più velocemente rispetto alle procedure manuali. Molte organizzazioni distribuiscono più volte al giorno.
  • Migliore qualità del codice: i controlli di qualità nelle pipeline CI, ad esempio linting e unit test, generano codice di qualità superiore.
  • Riduzione del rischio di rilascio : le procedure CI/CD appropriate riducono drasticamente il rischio di rilasciare nuove funzionalità. La distribuzione può essere testata prima del rilascio.
  • Maggiore produttività : ci/CD automatizzato consente agli sviluppatori di lavorare su integrazioni e distribuzioni manuali, in modo che possano concentrarsi sulle nuove funzionalità.
  • Abilitare i rollback: sebbene le procedure CI/CD appropriate diminuiscano il numero di bug o regressioni rilasciate, si verificano ancora. CI/CD può abilitare i rollback automatici alle versioni precedenti.

Potenziali casi d'uso

Prendere in considerazione i processi di Azure Pipelines e CI/CD per:

  • Accelerazione dei cicli di vita di sviluppo e distribuzione delle applicazioni.
  • Creazione di qualità e coerenza in un processo di compilazione e rilascio automatizzato.
  • Aumento della stabilità e del tempo di attività delle applicazioni.

Considerazioni

Queste considerazioni implementano i pilastri di Azure Well-Architected Framework, che è un set di set di principi guida che possono essere usati per migliorare la qualità di un carico di lavoro. Per altre informazioni, vedere Framework ben progettato di Microsoft Azure.

Eccellenza operativa

  • Prendere in considerazione l'implementazione dell'infrastruttura come codice (IaC) per definire l'infrastruttura e di distribuirla nelle pipeline.

  • Prendere in considerazione l'uso di una delle attività di tokenizzazione disponibili nel marketplace VSTS, nel contesto spesso si fa riferimento a un processo in cui le informazioni riservate (ad esempio chiavi API, password o altri segreti) vengono sostituite con token o segnaposto durante la distribuzione o la configurazione.

  • Usare le variabili di rilascio nelle definizioni di versione per determinare le modifiche di configurazione degli ambienti. Le variabili di versione possono avere come abito un'intera versione o un determinato ambiente. Quando si usano le variabili per le informazioni dei segreti, assicurarsi di selezionare l'icona a forma di lucchetto.

  • Prendere in considerazione l'uso di agenti self-hosted se si esegue la distribuzione in risorse in esecuzione in una rete virtuale protetta. È anche possibile prendere in considerazione gli agenti self-hosted se si esegue un volume elevato di compilazioni. Nei casi di volumi di compilazione elevati, gli agenti self-hosted possono essere usati per velocizzare le compilazioni in modo conveniente.

  • È consigliabile usare Application Insights e altri strumenti di monitoraggio il prima possibile nella pipeline di versione. Molte organizzazioni iniziano il monitoraggio solo nel loro ambiente di produzione. Monitorando gli altri ambienti, è possibile identificare i bug in fasi precedenti del processo di sviluppo ed evitare problemi nel proprio ambiente di produzione.

  • Prendere in considerazione l'uso di risorse di monitoraggio separate per la produzione.

  • Prendere in considerazione l'uso di pipeline YAML anziché dell'interfaccia classica. Le pipeline YAML possono essere considerate come altro codice. Le pipeline YAML possono essere archiviate nel controllo del codice sorgente e nella versione, ad esempio.

  • Prendere in considerazione l'uso di modelli YAML per promuovere il riutilizzo e semplificare le pipeline. Ad esempio, le pipeline di aggiornamento primario e ci sono simili. È possibile usare un singolo modello con parametri per entrambe le pipeline.

  • Prendere in considerazione la creazione di ambienti oltre la gestione temporanea e la produzione per supportare attività quali test di accettazione manuale dell'utente, test di prestazioni e test di carico e rollback.

Ottimizzazione dei costi

L'ottimizzazione dei costi riguarda l'analisi dei modi per ridurre le spese non necessarie e migliorare l'efficienza operativa. Per altre informazioni, vedere Panoramica del pilastro di ottimizzazione dei costi.

I costi di Azure DevOps dipendono dal numero di utenti dell'organizzazione che devono accedere, nonché da fattori come il numero di processi di compilazione/rilascio simultanei necessari e il numero di utenti di test. Per altre informazioni, vedere Prezzi per Azure DevOps.

Questo calcolatore dei prezzi offre una stima per l'esecuzione di Azure DevOps con 20 utenti.

Azure DevOps viene fatturato su base mensile per ogni singolo utente. Potrebbero essere previsti più addebiti a seconda delle pipeline simultanee necessarie, oltre a eventuali altri utenti di test o licenze di base utente.

Sicurezza

  • Prendere in considerazione i vantaggi di sicurezza dell'uso di agenti ospitati da Microsoft quando si sceglie se usare agenti ospitati da Microsoft o self-hosted.

  • Assicurarsi che tutte le modifiche apportate agli ambienti vengano eseguite tramite le pipeline. Implementare controlli degli accessi in base al ruolo (RBAC) sul principio dei privilegi minimi, impedendo agli utenti di accedere agli ambienti.

  • Valutare la possibilità di integrare i passaggi in Azure Pipelines per tenere traccia delle dipendenze, gestire le licenze, analizzare le vulnerabilità e mantenere aggiornate le dipendenze.

Passaggi successivi

Rivedere le risorse seguenti per altre informazioni relative ai processi di CI/CD e Azure DevOps: