Pianificare una pipeline di versione con Azure Pipelines

Completato

In questa sezione Andy e Mara pianificano una pipeline CD di base in esecuzione su Azure Pipelines.

Quando sarà pronta, verrà mostrata al resto del team. La pipeline fungerà da modello di verifica da migliorare ed espandere man mano che si acquisiranno ulteriori informazioni e si otterrà il feedback di Tim e Amita.

Da quali parti è costituita una pipeline CD di base?

Una pipeline CD di base contiene un trigger per iniziare il processo e almeno una fase o periodo di distribuzione. Una fase è costituita da processi. Un processo è una serie di passaggi che definisce il modo in cui compilare, testare o distribuire il software.

Diagram that shows a hand-drawn illustration of an artifact moving to a deployment environment.

Andy: Abbiamo già l'artefatto di compilazione , Si tratta del file .zip creato dalla pipeline di compilazione esistente. ma come possiamo distribuirlo in un ambiente live ?

Che cos'è una fase della pipeline?

Una fase è una parte della pipeline che può essere eseguita in modo indipendente ed essere attivata da meccanismi diversi. Un meccanismo può essere rappresentato dall'esito positivo della fase precedente, da una pianificazione o anche da un trigger manuale. Nel prossimo modulo si otterranno altre informazioni su questi meccanismi.

Mara: Potremmo avere una fase che compila l'app e un'altra fase che esegue i test.

Diagram that shows a hand-drawn illustration of a deployment pipeline that contains two stages, Build and Deploy.

Mara: Abbiamo già definito le attività per la fase di compilazione nella pipeline. La fase di distribuzione può essere simile e includere le attività che distribuiscono la compilazione in un ambiente.

La domanda è: dove possiamo distribuire l'artefatto?

Che cos'è un ambiente?

È probabile che il termine ambiente sia stato usato per fare riferimento alla posizione in cui l'applicazione o il servizio è in esecuzione. Ad esempio, l'ambiente di produzione potrebbe essere quello in cui gli utenti finali accedono all'applicazione.

Seguendo questo esempio, l'ambiente di produzione potrebbe essere:

  • Un computer fisico o una macchina virtuale (VM).
  • Un ambiente basato su contenitori, ad esempio Kubernetes.
  • Un servizio gestito, ad esempio il servizio app di Azure.
  • Un ambiente serverless, ad esempio Funzioni di Azure.

Un artefatto viene distribuito in un ambiente. Azure Pipelines semplifica la distribuzione in quasi tutti i tipi di ambiente, sia in locale che nel cloud.

In Azure Pipelines il termine ambiente ha un secondo significato. Un ambiente è una rappresentazione astratta dell'ambiente di distribuzione, ad esempio un cluster Kubernetes, un'istanza del servizio app o una macchina virtuale.

Un ambiente di Azure Pipelines registra la cronologia di distribuzione per facilitare l'identificazione dell'origine delle modifiche. Con l'uso degli ambienti di Azure Pipelines, è anche possibile definire i controlli di sicurezza e verificare la modalità di innalzamento di livello di un artefatto da una fase di una pipeline a un'altra. Il contenuto di un ambiente dipende dalle operazioni da eseguire con l'artefatto. Un ambiente in cui si vuole testare l'artefatto sarà probabilmente definito in modo diverso rispetto a quello in cui si vuole distribuire l'artefatto per gli utenti finali.

È possibile definire un ambiente di Azure Pipelines con un file YAML. Il file YAML include una sezione environment che specifica l'ambiente di Azure Pipelines in cui verrà distribuito l'artefatto.

Quando si pianifica la pipeline di versione, è necessario decidere la posizione in cui verrà eseguita l'applicazione o il servizio. Ecco la decisione di Andy e Mara.

Andy: A livello generale, che tipo di ambiente preferiamo? La distribuzione deve avvenire in locale o nel cloud?

Mara: Potremmo chiedere a Tim di creare una macchina virtuale per noi nel lab, ma è sempre in esaurimento dell'hardware. La configurazione di un modello di verifica è rapida e semplice se si usa il cloud.

Andy: Sono d'accordo; ma sono disponibili molte opzioni cloud da considerare e è possibile usare Azure Pipelines per la distribuzione in uno qualsiasi di essi. Quale dovremmo usare?

Mara: I team che sviluppano i nostri giochi usano Azure per ospitare alcuni dei sistemi back-end. La configurazione avviene rapidamente e sono soddisfatti. Secondo me dovremmo continuare a usare Azure per il cloud.

Andy: Ok, ha senso! Tuttavia, Azure offre molte opzioni di calcolo. Quale dovremmo scegliere?

Andy elenca le opzioni seguenti sulla lavagna:

  • Macchine virtuali
  • Contenitori
  • Servizio app di Azure
  • Computing senza server

Nota

Alla fine di questo modulo sono disponibili altre informazioni su ognuna di queste opzioni di calcolo.

Mara: I contenitori e l'elaborazione serverless sono molto richiesti in questo momento. Rispetto alle macchine virtuali, sono due opzioni leggere in termini di risorse. Sono anche facili da sostituire e da aumentare. Nonostante siano entrambi molto interessanti, sono preoccupata all'idea di apprendere due tecnologie nuove allo stesso tempo. Preferisco concentrarmi solo sulla creazione della pipeline.

Andy: Sono d'accordo con te. Rimangono le macchine virtuali e il servizio app. Se si intende spostare nel cloud un'app line-of-business, che richiede l'accesso completo a un determinato ambiente, le macchine virtuali rappresentano la scelta migliore. Non stiamo facendo nulla di così significativo.

Mara: L'ultima opzione è il servizio app, che rappresenta anche la mia scelta. È progettato per funzionare con Azure DevOps e presenta dei vantaggi. Si tratta di un ambiente di piattaforma distribuita come servizio (PaaS) per le app Web, che consente di alleggerire il lavoro. Non è necessario preoccuparsi dell'infrastruttura. Include anche funzionalità di sicurezza che consentono di eseguire il bilanciamento del carico e il ridimensionamento automatico.

Andy: Sembra esattamente ciò di cui abbiamo bisogno. Useremo il servizio app. Creiamo quindi un modello di verifica. In ogni caso, è possibile modificare l'opzione di calcolo in un secondo momento se si vuole provare un'altra soluzione.

In che modo Azure Pipelines esegue i passaggi per la distribuzione?

Per distribuire il software, è necessario che Azure Pipelines esegua innanzitutto l'autenticazione con l'ambiente di destinazione. Azure Pipelines offre meccanismi di autenticazione diversi. Quello da utilizzare si sceglie base all'ambiente di destinazione in cui si esegue la distribuzione. Alla fine di questo modulo sono disponibili altre informazioni su questi meccanismi.

Andy: Abbiamo a disposizione un artefatto di compilazione che verrà compilato e distribuito in fasi della pipeline. Abbiamo inoltre definito l'ambiente di destinazione per la distribuzione, ossia il servizio app. La domanda a questo punto è: in che modo Azure Pipelines esegue l'autenticazione con il servizio app? So che questa sarà una delle preoccupazioni principali di Tim. Dobbiamo assicurarci che il processo sia protetto.

Dopo una fase di ricerca, Andy e Mara illustrano i passaggi generali che consentono ad Azure Pipelines di eseguire la distribuzione nel servizio app:

  1. Specificare l'ambiente di distribuzione di destinazione nella configurazione della pipeline.
  2. Consentire ad Azure Pipelines di autenticare l'accesso a tale ambiente.
  3. Usare le attività di Azure Pipelines per distribuire l'artefatto di compilazione in tale ambiente.

Mara: Secondo le nostre ricerche, è necessario creare una connessione al servizio per specificare l'ambiente di destinazione e autenticare l'accesso. Dopo aver definito la connessione al servizio, sarà disponibile per tutte le attività da usare. È quindi necessario usare le attività predefinite DownloadPipelineArtifact per scaricare l'artefatto di compilazione nell'agente della pipeline e AzureWebApp per distribuire l'applicazione in Servizio app di Azure.

Che cosa sono i processi e le strategie?

La pipeline di compilazione esistente definisce un agente di compilazione, le variabili della pipeline e le attività necessarie per compilare il software.

La parte relativa alla distribuzione della pipeline contiene gli stessi elementi. La configurazione della distribuzione definisce in genere anche uno o più processi, un ambiente della pipeline e le strategie. Gli ambienti della pipeline sono stati presentati in precedenza.

Di seguito è riportata una configurazione di esempio che verrà eseguita più avanti in questo modulo. Questa configurazione consente di distribuire il sito Web di Space Game nel servizio app.

- stage: 'DeployDev'
  displayName: 'Deploy to dev environment'
  dependsOn: Build
  jobs:
  - deployment: Deploy
    pool:
      vmImage: 'ubuntu-20.04'
    environment: dev
    variables:
    - group: 'Release Pipeline'
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current
            artifact: drop
          - task: AzureWebApp@1
            displayName: 'Azure App Service Deploy: website'
            inputs:
              azureSubscription: 'Resource Manager - Tailspin - Space Game'
              appName: '$(WebAppName)'
              package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'

Processi

Un processo è una serie di passaggi, o attività, che vengono eseguite in sequenza come unità. Per impostazione predefinita, ogni fase della pipeline dispone di un processo, anche quando tale fase non usa la parola chiave job.

Un processo può essere eseguito in un pool di agenti, in un contenitore o direttamente nel server Azure DevOps. Il processo di esempio illustrato di seguito viene eseguito su un agente Ubuntu ospitato da Microsoft.

È possibile specificare le condizioni in base alle quali eseguire ogni processo. Il processo di esempio illustrato di seguito non definisce alcuna condizione. Per impostazione predefinita, è possibile eseguire un processo se non dipende da un altro processo o se tutti i processi da cui dipende sono stati completati correttamente.

È anche possibile eseguire processi in parallelo o in sequenza. Usando la pipeline di compilazione esistente come esempio, è possibile usare i processi in parallelo per compilare contemporaneamente il software sugli agenti Windows, Linux e macOS.

Un processo di distribuzione è un tipo particolare di processo che svolge un ruolo importante nelle fasi di distribuzione. I processi di distribuzione registrano lo stato delle distribuzioni in Azure Pipelines, fornendo un audit trail. I processi di distribuzione consentono anche di definire la strategia di distribuzione, come verrà illustrato a breve.

Strategie

Una strategia definisce la modalità di implementazione dell'applicazione. In un prossimo modulo si potranno approfondire strategie come quella blu-verde e canary. Per il momento, si userà la strategia runOnce per scaricare il pacchetto Space Game dalla pipeline e distribuirlo nel servizio app.

In che modo avviene la connessione tra Azure Pipelines e Azure?

Per distribuire l'app in una risorsa di Azure, ad esempio una macchina virtuale o un servizio app, è necessaria una connessione al servizio. Una connessione al servizio offre un accesso sicuro alla sottoscrizione di Azure usando uno dei due metodi seguenti:

  • Autenticazione dell'entità servizio
  • Identità gestite per le risorse di Azure

È possibile ottenere altre informazioni su questi modelli di sicurezza alla fine di questo modulo, ma in breve:

  • Un'entità servizio è un'identità con un ruolo limitato che può accedere alle risorse di Azure. È possibile considerarla come un account del servizio in grado di eseguire attività automatiche per conto dell'utente.
  • Le identità gestite per le risorse di Azure sono una funzionalità di Microsoft Entra ID che semplifica il processo di utilizzo delle entità servizio. Dal momento che nel tenant di Microsoft Entra sono presenti identità gestite, l'infrastruttura di Azure può autenticare automaticamente il servizio e gestire l'account per conto dell'utente.

Le identità gestite semplificano il processo di utilizzo delle entità servizio; ma in questo modulo verrà usata l'autenticazione dell'entità servizio perché una connessione al servizio può individuare automaticamente le risorse di Azure e assegnare automaticamente i ruoli dell'entità servizio appropriati.

Il piano

Andy e Mara sono pronti per iniziare. Eseguiranno le operazioni seguenti:

  • Compilare la configurazione della build esistente di Azure Pipelines.
  • Definire una fase di compilazione che crei l'artefatto.
  • Definire una fase di distribuzione che distribuisca l'artefatto nel servizio app.

Diagram that shows a hand-drawn illustration of a deployment pipeline that contains two stages. The deployment stage deploys the artifact to App Service.

Andy: Il disegno è corretto? Usiamo Azure Pipelines per la distribuzione in servizio app. A tale scopo, usiamo l'artefatto di compilazione come input per la fase di distribuzione. Le attività della fase di distribuzione scaricano l'artefatto e usano una connessione di servizio per distribuire l'artefatto nel servizio app.

Mara: Ottimo riassunto. Iniziamo.

Verificare le conoscenze

1.

Si sta progettando una nuova app Web. Il codice presente sul computer portatile è funzionante, ma prima di continuare si vuole ricevere commenti e suggerimenti dal team. Qual è il modo più rapido per distribuire l'app in Azure in modo che sia possibile condividerla con il team?

2.

Quali sono le risorse richieste da Azure Pipelines per eseguire la distribuzione nel servizio app di Azure?

3.

Quale delle affermazioni seguenti descrive la relazione tra attività, fasi e processi?