Esercizio: Configurare l'ambiente Azure DevOps

Completato

In questa sezione, verrà illustrato come configurare l'organizzazione di Azure DevOps per poi procedere con il resto di questo modulo e creare un ambiente di servizio Azure Kubernetes (AKS) in cui distribuire l'applicazione.

Per raggiungere questi obiettivi, occorre:

  • Aggiungere un utente all'organizzazione di Azure DevOps.
  • Configurare il progetto Azure DevOps.
  • Gestire il flusso di lavoro con Azure Boards.
  • Creare risorse di Azure usando l'interfaccia della riga di comando di Azure.
  • Creare variabili di pipeline in Azure Pipelines.
  • Creare una connessione al servizio per l’autenticazione con Azure.
  • Aggiornare il manifesto della distribuzione Kubernetes.

Aggiungere un utente all'organizzazione

Per completare il modulo, è necessaria una sottoscrizione di Azure. È possibile iniziare a usare Azure gratuitamente.

Anche se non occorre usare Azure DevOps, è necessaria una sottoscrizione di Azure per la distribuzione nelle risorse di Azure tramite Azure DevOps. Per semplificare il processo, usare lo stesso account Microsoft per accedere alla sottoscrizione di Azure e all'organizzazione Azure DevOps.

Se si accede ad Azure e Azure DevOps usando account Microsoft diversi, è comunque possibile procedere aggiungendo un utente all'organizzazione DevOps nell'account Microsoft associato alla sottoscrizione di Azure. Per altre informazioni, vedere Aggiungere utenti all'organizzazione o al progetto. Quando si aggiunge l'utente, selezionare il livello di accesso Basic.

Dopo aver aggiunto l'utente con livello di accesso Basic, disconnettersi da Azure DevOps e accedere usando l'account Microsoft associato alla sottoscrizione di Azure.

Ottenere il progetto Azure DevOps

In questa sezione viene eseguito un modello per creare il progetto in Azure DevOps.

Eseguire il modello

Eseguire il modello per configurare il progetto Azure DevOps per questo modulo:

Nel portale generatore demo di Azure DevOps, attenersi alla procedura seguente per eseguire il modello:

  1. Selezionare Accedi e accettare le condizioni per l'uso.

  2. Nella pagina Crea nuovo progetto, selezionare l'organizzazione Azure DevOps e immettere un nome di progetto, ad esempio Space Game - Web - Kubernetes.

    Screenshot of the Azure DevOps Demo Generator showing the process to create the project.

  3. Selezionare Sì, desidero creare una copia tramite fork del repository e quindi Autorizza. Se viene visualizzata una finestra, concedere l'autorizzazione per accedere all'account di GitHub.

    Importante

    L'abilitazione di questa opzione è necessaria per connettere il modello al repository GitHub. Sceglierlo anche se si è già creata una copia tramite fork del repository Space Game perché il modello userà il fork esistente.

  4. Selezionare Crea progetto e attendere il completamento dell'esecuzione del modello, che potrebbe richiedere alcuni minuti.

  5. Selezionare Passa al progetto per accedere al proprio progetto in Azure DevOps.

Importante

L'unità Pulire l'ambiente Azure DevOps in questo modulo include passaggi cruciali per la pulizia. È consigliabile eseguire questi passaggi per evitare di esaurire i minuti di compilazione gratuiti. Anche se non si completa il modulo, è essenziale seguire i passaggi per la pulizia.

Impostare la visibilità del progetto

Inizialmente, la copia tramite fork del repository Space Game in GitHub è impostata su pubblica mentre il progetto creato dal modello Azure DevOps è impostato su privato. Un repository pubblico in GitHub può essere accessibile da chiunque, mentre un repository privato è accessibile solo all'utente e alle persone con cui si sceglie di condividerlo. Analogamente, in Azure DevOps, i progetti pubblici forniscono l'accesso in sola lettura agli utenti non autenticati, mentre i progetti privati richiedono l'accesso e l'autenticazione degli utenti per accedere ai servizi.

Al momento, non è necessario modificare alcuna di queste impostazioni ai fini di questo modulo. Tuttavia, per i progetti personali, è necessario determinare la visibilità e l'accesso che si desidera concedere ad altri utenti. Ad esempio, se il progetto è open source, è possibile rendere pubblici il repository GitHub e il progetto Azure DevOps. Se il progetto è closed source, probabilmente si preferirà che il repository GitHub e il progetto DevOps di Azure siano privati.

Più avanti, è possibile trovare le risorse seguenti utili per determinare quale opzione è migliore per il progetto:

Passare l'elemento di lavoro allo stato In corso

In questo passaggio, si assegna un elemento di lavoro a sé stessi in Azure Boards e lo si sposta nello stato In corso. Negli scenari reali, insieme al team si creano elementi di lavoro all'inizio di ogni sprint o iterazione di lavoro.

L'assegnazione degli elementi di lavoro offre un elenco di controllo su cui lavorare e agli altri membri del team visibilità sullo stato di avanzamento e sul lavoro rimanente. Consente inoltre di applicare limiti al lavoro in corso (WIP) per evitare al team di accettare una quantità eccessiva di lavoro in una sola volta.

  1. Passare a Boards in Azure DevOps e quindi scegliere Boards dal menu.

    Screenshot of Azure DevOps showing the location of the Boards menu.

  2. Assegnare a sé stessi l’elemento di lavoro Crea versione multi-contenitore del sito Web orchestrato con Kubernetes selezionando la freccia giù situata nella parte inferiore della scheda.

    Screenshot of Azure Boards showing the location of the down arrow.

  3. Trascinare la selezione dell'elemento di lavoro dalla colonna Da fare alla colonna In corso. L'attività verrà spostata nella colonna Completato alla fine di questo modulo dopo averlo completato.

    Screenshot of Azure Boards showing the card in the Doing column.

Creare l'ambiente del servizio Azure Kubernetes

In questo passaggio si creano le risorse necessarie servizio Azure Kubernetes per distribuire la nuova versione del contenitore del sito Web.

Nel modulo precedente Creare una pipeline di versione con Azure Pipelines, è stato usato il portale di Azure per creare risorse di Azure. Anche se il portale è utile per esplorare le funzionalità di Azure ed eseguire attività di base, la creazione di componenti come servizio Azure Kubernetes può essere un processo che richiede tempo.

In questo modulo si usa l'interfaccia della riga di comando di Azure per creare le risorse necessarie per distribuire ed eseguire l'applicazione scelta nel servizio Azure Kubernetes. È possibile accedere all'interfaccia della riga di comando di Azure da un terminale o tramite Visual Studio Code. In questo modulo, tuttavia, si accede all'interfaccia della riga di comando di Azure da Azure Cloud Shell. Cloud Shell è un'esperienza shell basata su browser ospitata nel cloud, che viene preconfigurata tramite l'interfaccia della riga di comando di Azure per l'uso con la sottoscrizione di Azure.

Importante

Per completare gli esercizi in questo modulo, è necessaria una sottoscrizione di Azure.

Avviare Cloud Shell

  1. Passare al portale di Azure ed eseguire l'accesso.

  2. Selezionare l’opzione Cloud Shell dal menu e quindi scegliere l'esperienza Bash quando richiesto.

    Screenshot of the Azure portal showing the location of the Cloud Shell menu item.

Nota

Cloud Shell richiede una risorsa di archiviazione di Azure per rendere persistenti i file creati in Cloud Shell. Alla prima apertura, Cloud Shell chiede di creare un gruppo di risorse, un account di archiviazione e una condivisione di File di Azure. Questa configurazione viene usata automaticamente per tutte le sessioni di Cloud Shell future.

Selezionare un'area di Azure

Un'area si riferisce a uno o più data center di Azure situati in un'area geografica. Le aree come Stati Uniti orientali, Stati Uniti occidentali e Europa settentrionale sono esempi di tali aree geografiche. A ogni risorsa di Azure, inclusa un'istanza del servizio app, viene assegnata un'area.

Per semplificare l'esecuzione dei comandi, iniziare impostando un'area predefinita. Dopo aver impostato un'area predefinita, i comandi successivi usano tale area per impostazione predefinita, a meno che non si specifichi in modo esplicito un'area diversa.

  1. Da Cloud Shell, eseguire il comando seguente per elencare le aree disponibili nella sottoscrizione di Azure:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Selezionare un'area geografica dalla colonna Nome nell'output geograficamente vicino all'utente. Ad esempio, è possibile scegliere eastasia o westus2.

  3. Eseguire il comando seguente per impostare l'area geografica predefinita. Sostituire REGION con il nome dell'area geografica scelta in precedenza.

    az configure --defaults location=<REGION>
    

    Questo esempio imposta westus2 come area predefinita.

    az configure --defaults location=westus2
    

Creare variabili bash

Usando le variabili Bash è possibile rendere il processo di configurazione più semplice e meno soggetto a errori. Questo approccio consente di evitare errori di digitazione accidentali definendo stringhe di testo condivise come variabili che possono essere usate in tutto lo script.

  1. In Cloud Shell, generare un numero casuale, per semplificare la creazione di nomi univoci globali per determinati servizi nel passaggio successivo.

    resourceSuffix=$RANDOM
    
  2. Creare nomi univoci globali per il Registro Azure Container e l'istanza del servizio Azure Kubernetes. Si noti che questi comandi usano le virgolette doppie, che indicano a Bash di interpolare le variabili usando la sintassi inline.

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. Creare un'altra variabile Bash per archiviare il nome del gruppo di risorse.

    rgName='tailspin-space-game-rg'
    
  4. Trovare la versione più recente del servizio Azure Kubernetes.

    az aks get-versions
    

    Prendere nota della versione più recente.

Creare risorse Azure

Nota

In questa esercitazione, vengono usate le impostazioni di rete predefinite a scopo di apprendimento. Queste impostazioni consentono l'accesso al sito Web da Internet. In pratica, è tuttavia possibile configurare una rete virtuale di Azure che colloca il sito Web in una rete non instradabile su Internet e accessibile solo all'utente e al team. Successivamente, è possibile riconfigurare la rete per rendere disponibile il sito Web agli utenti.

  1. Eseguire il comando seguente per creare un gruppo di risorse usando il nome definito in precedenza:

    az group create --name $rgName
    
  2. Eseguire il comando az acr create per creare un registro Azure Container con il nome definito in precedenza:

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. Eseguire il comando az aks create per creare un’istanza del servizio Azure Container con il nome definito in precedenza. Sostituire <latest-AKS-version> con la versione annotata in precedenza.

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    Nota

    Il completamento della distribuzione del servizio Azure Kubernetes può richiedere da 10 a 15 minuti.

  4. Creare una variabile per archiviare l'ID dell'entità servizio configurata per l'istanza del servizio Azure Kubernetes:

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Creare una variabile per archiviare l'ID del Registro Azure Container:

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. Eseguire il comando az acr list per recuperare l'URL del server di accesso per l'istanza di Registro Azure Container:

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    Assicurarsi di prendere nota del server di accesso per il registro contenitori. Queste informazioni sono necessarie in un secondo momento durante la configurazione della pipeline. Ecco un esempio:

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. Eseguire il comando az role assignment create per creare un'assegnazione di ruolo per autorizzare il cluster del servizio Azure Kubernetes a connettersi al Registro Azure Container:

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

Importante

L'unità Pulire l'ambiente Azure DevOps in questo modulo include passaggi cruciali per la pulizia. È consigliabile eseguire questi passaggi per evitare di esaurire i minuti di compilazione gratuiti. Anche se non si completa il modulo, è essenziale seguire i passaggi per la pulizia.

Creare un gruppo di variabili

In questa sezione si aggiungerà una variabile alla pipeline per archiviare il nome del Registro Azure Container. È consigliabile definire il nome dell'istanza di Registro Azure Container come variabile nella configurazione della pipeline tramite codifica rigida. Ciò rende la configurazione più riutilizzabile e, nel caso in cui il nome dell'istanza venga modificato, è possibile aggiornare facilmente la variabile e attivare la pipeline senza dover modificare la configurazione.

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline e quindi Libreria nel riquadro di spostamento a sinistra.

    Screenshot of Azure Pipelines showing the Library menu option.

  3. Selezionare Gruppi di variabili poi+ Gruppo di variabili per aggiungere un nuovo gruppo di variabili.

  4. Nella sezione Proprietà, immettere Versione come nome del gruppo di variabili.

  5. Nella sezione Variabili, selezionare Aggiungi.

  6. Immettere RegistryName come nome della variabile e immettere il server di accesso del Registro Azure Container, ad esempio tailspinspacegame4692.azurecr.io.

  7. Nella parte superiore della pagina, selezionare Salva per salvare la variabile della pipeline. Questo è un esempio dell'aspetto del gruppo di variabili

    Screenshot of Azure Pipeline showing the variable group. The group contains one variable.

Creare connessioni al servizio

Nel prossimo passaggio, si creano connessioni al servizio che consentono ad Azure Pipelines di accedere alle istanze del Registro Azure Container e del servizio Azure Kubernetes. Creando queste connessioni al servizio, Azure Pipelines può eseguire il push dei contenitori, nonché indicare al cluster del servizio Azure Kubernetes di eseguire il pull per aggiornare il servizio distribuito.

Importante

Assicurarsi di aver eseguito l'accesso al portale di Azure e ad Azure DevOps con lo stesso account Microsoft.

Creare una connessione al servizio Registro Docker

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Impostazioni progetto nell'angolo inferiore della pagina.

  3. Selezionare Connessioni al servizio nella sezione Pipeline.

  4. Selezionare Nuova connessione al servizio, quindi selezionare Registro Docker e poi Avanti.

  5. Nella parte superiore della pagina, selezionare Registro Azure Container poi selezionare Entità servizio per il tipo di autenticazione.

  6. Immettere i valori seguenti per ogni impostazione:

    Impostazione Valore
    Subscription la propria sottoscrizione di Azure
    Registro Azure Container Selezionare la connessione creata in precedenza
    Nome connessione al servizio Connessione al registro Container
  7. Assicurarsi che sia selezionata la casella di controllo per Concedi l'autorizzazione di accesso a tutte le pipeline.

  8. Al termine, seleziona Salva.

Creare una connessione al servizio Azure Resource Manager

Si creerà ora una connessione al servizio Azure Resource Manager per l'autenticazione con il cluster del servizio Azure Kubernetes. Viene usata una connessione al servizio ARM anziché Kubernetes perché i token di lunga durata non vengono più creati per impostazione predefinita a partire da Kubernetes 1.24. Per altre informazioni, vedere questo post di blog di DevOps: Linee guida per la connessione al servizio per i clienti del servizio Azure Kubernetes che usano le attività di Kubernetes.

  1. Selezionare Nuova connessione al servizio, selezionare Azure Resource Manager poi selezionare Avanti.

  2. Selezionare Entità servizio (automatico) poi selezionare Avanti.

  3. Selezionare Sottoscrizione per il livello di ambito.

  4. Immettere i seguenti valori per ogni impostazione.

    Impostazione Valore
    Subscription la propria sottoscrizione di Azure
    Gruppo di risorse Selezionare la connessione creata in precedenza
    Nome connessione al servizio Connessione al cluster Kubernetes
  5. Assicurarsi che sia selezionata la casella di controllo per Concedi l'autorizzazione di accesso a tutte le pipeline.

  6. Al termine, seleziona Salva.

Creare un ambiente pipeline

  1. Selezionare Pipeline poi Ambienti.

    Screenshot of Azure Pipelines showing the Environments menu option.

  2. Selezionare Crea ambiente per creare un nuovo ambiente.

  3. Nel campo Nome file immettere Dev.

  4. Selezionare Nessuno nella sezione Risorsa e quindi selezionare Crea per creare l'ambiente della pipeline.

Aggiornare il manifesto della distribuzione Kubernetes.

In questa sezione si aggiornerà il file manifesto Kubernetes deployment.yml in modo che punti al registro contenitori creato in precedenza.

  1. Passare all'account GitHub e selezionare il repository copiato tramite fork per questo modulo: mslearn-tailspin-spacegame-web-kubernetes.

  2. Aprire il file manifests/deployment.yml in modalità di modifica.

    Screenshot of GitHub showing the location of the edit mode icon.

  3. Modificare i riferimenti all'immagine del contenitore per usare il server di accesso del Registro Azure Container. Il manifesto seguente usa tailspinspacegame2439.azurecr.io come esempio.

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. Eseguire il commit delle modifiche nel ramo main.