Esercizio - Creare un agente di compilazione in esecuzione in Azure

Completato

In questa unità, per configurare un agente di compilazione che è possibile usare in Microsoft Azure Pipelines, si userà una macchina virtuale in esecuzione in Microsoft Azure. È disponibile una macchina virtuale che è possibile usare per la durata di questo modulo.

In questa unità si apprenderà come:

  • Creare una macchina virtuale Ubuntu in Azure da usare come agente di compilazione.
  • Creare un pool di agenti in Microsoft Azure DevOps.
  • Creare un token di accesso per autenticare l'agente con Azure DevOps.
  • Configurare l'agente con il software necessario per creare il sito Web space game .
  • Configurare l'agente per connettersi ad Azure DevOps in modo che possa ricevere processi di compilazione.
  • Verificare che l'agente sia connesso ad Azure DevOps e che sia pronto per ricevere i processi di compilazione.

Esistono molti modi per creare una macchina virtuale in Azure. In questa unità si creerà una macchina virtuale Ubuntu usando un terminale interattivo denominato Cloud Shell.

Per configurare la macchina virtuale, sono disponibili diverse opzioni:

  • Per una macchina virtuale Linux, è possibile connettersi direttamente tramite SSH e configurare in modo interattivo il sistema.
  • È possibile automatizzare la distribuzione usando un modello ARM, Bicep o un altro strumento di provisioning automatizzato.
  • Se è necessario distribuire molti agenti di compilazione, è possibile creare un'immagine di macchina virtuale con tutto il software preinstallato.

La configurazione interattiva di un sistema è un modo efficace per iniziare, perché consente di comprendere il processo e gli elementi necessari. Per semplificare il processo, connettersi alla macchina virtuale Ubuntu tramite SSH ed eseguire script della shell per configurare l'agente di compilazione.

Nota

Se non si ha familiarità con la connessione o la configurazione di sistemi Linux, è sufficiente seguire questa procedura. È possibile applicare gli stessi concetti agli agenti di compilazione di Windows.

Creare una macchina virtuale Linux

In questa sezione viene creata una macchina virtuale che esegue Ubuntu 20.04, che fungerà da agente di compilazione. La macchina virtuale non è ancora configurata per essere un agente di compilazione o avere uno degli strumenti necessari per compilare l'applicazione Web Space Game . Questa operazione verrà configurata a breve.

Aprire Cloud Shell dal portale di Azure

Importante

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

  1. Aprire il portale di Azure e accedere.

  2. Dal menu selezionare Cloud Shell. Quando viene richiesto, selezionare l'esperienza Bash.

    A 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 tutti i file creati in Cloud Shell. Quando si apre Per la prima volta Cloud Shell, viene richiesto di creare un gruppo di risorse, un account di archiviazione e File di Azure condivisione. Questa configurazione viene usata automaticamente per tutte le sessioni di Cloud Shell future.

Selezionare un'area di Azure

Un'area è uno o più data center di Azure all'interno di una posizione geografica. Stati Uniti orientali, Stati Uniti occidentali ed Europa settentrionale sono esempi di aree. A ogni risorsa di Azure, incluse le macchine virtuali, viene assegnata un'area.

Per semplificare l'esecuzione dei comandi, iniziare selezionando un'area predefinita. Dopo aver specificato l'area predefinita, i comandi successivi usano tale area a meno che non si specifichi un'area diversa.

  1. Da Cloud Shell eseguire il comando seguente az account list-locations per elencare le aree disponibili dalla sottoscrizione di Azure:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Name Nella colonna nell'output selezionare un'area vicina all'utente. Ad esempio, scegliere eastasia o westus2.

  3. Eseguire az configure per impostare l'area predefinita. Sostituire <REGION> con il nome dell'area selezionata:

    az configure --defaults location=<REGION>
    

    Questo esempio imposta westus2 come area predefinita:

    az configure --defaults location=westus2
    

Creare un gruppo di risorse

Creare un gruppo di risorse per contenere tutte le risorse che verranno usate in questo modulo di formazione.

  • Per creare un gruppo di risorse denominato tailspin-space-game-rg, eseguire il comando seguente az group create :

    az group create --name tailspin-space-game-rg
    

Creare la macchina virtuale

Per creare la macchina virtuale, eseguire il comando seguente az vm create :

az vm create \
    --name MyLinuxAgent \
    --resource-group tailspin-space-game-rg \
    --image canonical:0001-com-ubuntu-server-focal:20_04-lts:latest \
    --size Standard_DS2_v2 \
    --admin-username azureuser \
    --generate-ssh-keys

La macchina virtuale richiederà alcuni minuti.

Standard_DS2_v2 specifica le dimensioni della macchina virtuale. Le dimensioni di una macchina virtuale ne definiscono la velocità del processore, la quantità di memoria, la quantità iniziale di spazio di archiviazione e la larghezza di banda di rete prevista. Si tratta delle stesse dimensioni fornite dagli agenti ospitati da Microsoft. In pratica, è possibile scegliere una dimensione che offra una maggiore potenza di calcolo o funzionalità aggiuntive, ad esempio l'elaborazione grafica.

L'argomento --resource-group specifica il gruppo di risorse che contiene tutti gli elementi da creare. Un gruppo di risorse consente di amministrare tutte le macchine virtuali, i dischi, le interfacce di rete e altri elementi che costituiscono la soluzione come unità.

Creare il pool di agenti

Tenere presente che un pool di agenti organizza gli agenti di compilazione. In questa sezione si creerà il pool di agenti in Azure DevOps. Successivamente, si specificherà il nome del pool di agenti quando si configura l'agente in modo che possa registrarsi al pool corretto.

  1. In Azure DevOps passare al progetto Space Game - Web - Agent .

  2. Selezionare Impostazioni progetto.

  3. In Pipeline selezionare Pool di agenti.

    A screenshot of the project settings in Azure DevOps showing the location of the Agent pools menu item.

  4. Selezionare Aggiungi pool.

  5. Nella finestra Aggiungi pool :

    1. In Pool da collegare selezionare Nuovo.
    2. In Tipo di pool selezionare Self-hosted.
    3. In Nome immettere MyAgentPool.

    In pratica, scegliere un nome più descrittivo per il pool.

  6. Seleziona Crea. Il nuovo pool di agenti viene visualizzato nell'elenco.

Creare un token di accesso personale

Per consentire all'agente di compilazione di registrarsi con Azure DevOps, è necessario un modo per eseguire l'autenticazione.

A tale scopo, è possibile creare un token di accesso personale. Un token di accesso personale, o PAT, è un'alternativa a una password. È possibile usare il token di accesso personale per eseguire l'autenticazione con servizi come Azure DevOps.

Importante

Come si farebbe con una password, assicurarsi di mantenere il token di accesso in un luogo sicuro. In questa sezione si archivierà il token di accesso come variabile di ambiente in modo che non venga visualizzato nello script della shell.

  1. In Azure DevOps aprire le impostazioni del profilo e quindi selezionare Token di accesso personali.

    A screenshot of Azure DevOps showing the location of the Personal access tokens menu item.

  2. Selezionare Nuovo token.

  3. Immettere un nome per il token, ad esempio l'agente di compilazione.

  4. In Ambiti selezionare il collegamento Mostra tutti gli ambiti nella parte inferiore.

  5. Cercare Pool di agenti, quindi selezionare Lettura e gestione.

  6. Seleziona Crea.

  7. Copiare il token in un luogo sicuro.

    A breve si userà il token per consentire all'agente di compilazione di autenticare l'accesso ad Azure Pipelines.

Connettersi alla macchina virtuale

In questa sezione si connetterà alla macchina virtuale Linux tramite SSH in modo che sia possibile configurarla.

Tenere presente che non è possibile accedere in modo interattivo a un agente ospitato da Microsoft. Poiché un agente di compilazione privato è il proprio, è possibile accedere e configurarlo, ma si vuole.

La possibilità di connettersi all'agente di compilazione consente di configurarla con gli strumenti necessari per compilare il software. Consente anche di risolvere i problemi durante la compilazione della configurazione della pipeline.

  1. Per ottenere l'indirizzo IP della macchina virtuale, eseguire az vm show in Cloud Shell:

    IPADDRESS=$(az vm show \
      --name MyLinuxAgent \
      --resource-group tailspin-space-game-rg \
      --show-details \
      --query [publicIps] \
      --output tsv)
    

    Questo comando archivia l'indirizzo IP in una variabile Bash denominata IPADDRESS.

  2. Stampare l'indirizzo IP della macchina virtuale nella console:

    echo $IPADDRESS
    
  3. Creare una connessione SSH alla macchina virtuale. Al posto di $IPADDRESS, immettere l'indirizzo IP ricevuto nel passaggio precedente. Al prompt immettere per continuare la connessione.

    ssh azureuser@$IPADDRESS
    

    A questo momento si è connessi alla macchina virtuale tramite SSH.

    Questo comando funziona perché è stata fornita l'opzione --generate-ssh-keys quando è stata eseguita az vm create in precedenza. Questa opzione crea una coppia di chiavi SSH, che consente di accedere alla macchina virtuale.

Installare gli strumenti di compilazione nella macchina virtuale

In questa sezione si configurerà la macchina virtuale con gli strumenti necessari per compilare il sito Web space game .

Tenere presente che il processo di compilazione esistente usa questi strumenti:

  • .NET SDK, usato per compilare l'applicazione
  • Node.js, usato per eseguire attività di compilazione
  • npm, gestione pacchetti per Node.js
  • gulp, un pacchetto Node.js usato per minificare i file JavaScript e CSS

Questi sono gli strumenti principali necessari per il processo di compilazione. Per installarli, scaricare ed eseguire uno script della shell da GitHub.

Nota

Il processo di compilazione usa altri strumenti, ad esempio node-sass, per convertire i file Sass (.scss) in file CSS (.css). Tuttavia, Node.js installa questi strumenti quando viene eseguita la compilazione.

Per iniziare, aggiornare gestione pacchetti Ubuntu, denominato apt. Questa azione recupera le informazioni più recenti dai repository di pacchetti ed è in genere la prima cosa che si esegue quando si configura un nuovo sistema Ubuntu.

  1. Nella connessione SSH aggiornare la cache apt package manager:

    sudo apt-get update
    

    sudo esegue il comando con privilegi di amministratore o radice.

  2. Per scaricare uno script della shell denominato build-tools.sh da GitHub, eseguire il comando seguente curl :

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
    
  3. Stampare lo script nel terminale in modo che sia possibile esaminarne il contenuto:

    cat build-tools.sh
    

    Viene visualizzato il risultato seguente:

    #!/bin/bash
    set -e
    
    # Select a default .NET version if one is not specified
    if [ -z "$DOTNET_VERSION" ]; then
      DOTNET_VERSION=6.0.300
    fi
    
    # Add the Node.js PPA so that we can install the latest version
    curl -sL https://deb.nodesource.com/setup_16.x | bash -
    
    # Install Node.js and jq
    apt-get install -y nodejs
    
    apt-get install -y jq
    
    # Install gulp
    npm install -g gulp
    
    # Change ownership of the .npm directory to the sudo (non-root) user
    chown -R $SUDO_USER ~/.npm
    
    # Install .NET as the sudo (non-root) user
    sudo -i -u $SUDO_USER bash << EOF
    curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -c LTS -v $DOTNET_VERSION
    EOF
    

    Lo script installa Node.js, npm, gulp e .NET Core.

    Impostando la DOTNET_VERSION variabile di ambiente, è possibile specificare la versione di .NET da installare. Se non si imposta questa variabile, lo script installa la versione usata dalla configurazione di compilazione esistente. Ai fini dell'apprendimento, questa variabile non viene impostata. È possibile consentire allo script di usare la versione predefinita.

  4. Rendere eseguibile lo script, quindi eseguire lo script:

    chmod u+x build-tools.sh
    sudo ./build-tools.sh
    

    L'esecuzione dello script richiede alcuni minuti.

    In pratica, è ora possibile eseguire comandi per verificare che ogni componente software sia stato installato correttamente.

Installare il software dell'agente nella macchina virtuale

A questo punto è possibile installare il software agente nella macchina virtuale. Questo software consente alla macchina virtuale di fungere da agente di compilazione e ricevere processi di compilazione da Azure Pipelines.

Il processo di registrazione verifica la presenza di software installato prima di registrare l'agente con Azure Pipelines. Pertanto, è importante configurare l'agente dopo aver installato tutti gli altri software. In pratica, è possibile registrare l'agente una seconda volta se è necessario installare software aggiuntivo.

La documentazione illustra come configurare manualmente gli agenti Linux self-hosted, nonché gli agenti macOS e Windows. Si esegue uno script della shell per configurare l'agente nello stesso modo in cui si configurano gli strumenti di compilazione nella sezione precedente.

Importante

Lo script eseguito qui è destinato all'apprendimento. In pratica, è necessario prima di tutto comprendere il modo in cui ogni comando negli script compilati influisce sul sistema generale. Al termine del modulo, si punterà alla documentazione che descrive più completamente le opzioni.

  1. Per scaricare uno script della shell denominato build-agent.sh da GitHub, eseguire il comando seguente curl :

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
    
  2. Stampare lo script nel terminale in modo che sia possibile esaminarne il contenuto:

    cat build-agent.sh
    

    Viene visualizzato il risultato seguente:

    #!/bin/bash
    set -e
    
    # Select a default agent version if one is not specified
    if [ -z "$AZP_AGENT_VERSION" ]; then
      AZP_AGENT_VERSION=2.187.2
    fi
    
    # Verify Azure Pipelines token is set
    if [ -z "$AZP_TOKEN" ]; then
      echo 1>&2 "error: missing AZP_TOKEN environment variable"
      exit 1
    fi
    
    # Verify Azure DevOps URL is set
    if [ -z "$AZP_URL" ]; then
      echo 1>&2 "error: missing AZP_URL environment variable"
      exit 1
    fi
    
    # If a working directory was specified, create that directory
    if [ -n "$AZP_WORK" ]; then
      mkdir -p "$AZP_WORK"
    fi
    
    # Create the Downloads directory under the user's home directory
    if [ -n "$HOME/Downloads" ]; then
      mkdir -p "$HOME/Downloads"
    fi
    
    # Download the agent package
    curl https://vstsagentpackage.azureedge.net/agent/$AZP_AGENT_VERSION/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz > $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz
    
    # Create the working directory for the agent service to run jobs under
    if [ -n "$AZP_WORK" ]; then
      mkdir -p "$AZP_WORK"
    fi
    
    # Create a working directory to extract the agent package to
    mkdir -p $HOME/azp/agent
    
    # Move to the working directory
    cd $HOME/azp/agent
    
    # Extract the agent package to the working directory
    tar zxvf $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz
    
    # Install the agent software
    ./bin/installdependencies.sh
    
    # Configure the agent as the sudo (non-root) user
    chown $SUDO_USER $HOME/azp/agent
    sudo -u $SUDO_USER ./config.sh --unattended \
      --agent "${AZP_AGENT_NAME:-$(hostname)}" \
      --url "$AZP_URL" \
      --auth PAT \
      --token "$AZP_TOKEN" \
      --pool "${AZP_POOL:-Default}" \
      --work "${AZP_WORK:-_work}" \
      --replace \
      --acceptTeeEula
    
    # Install and start the agent service
    ./svc.sh install
    ./svc.sh start
    

    Non è necessario comprendere il funzionamento di ogni riga, ma di seguito è riportato un breve riepilogo delle operazioni di questo script:

    • Scarica il pacchetto dell'agente come file con estensione tar.gz ed estrae il relativo contenuto.
    • Nei file estratti lo script:
      • Esegue uno script della shell denominato installdependencies.sh per installare il software dell'agente.
      • Esegue uno script della shell denominato config.sh per configurare l'agente e registrare l'agente con Azure Pipelines.
      • Esegue uno script della shell denominato svc.sh per installare e avviare il servizio agente.

    Lo script usa le variabili di ambiente per consentire di fornire informazioni dettagliate sull'organizzazione di Azure DevOps. Di seguito è disponibile un riepilogo:

    Variabile Bash Descrizione Default
    AZP_AGENT_VERSION Versione del software dell'agente da installare La versione usata per l'ultima volta per testare questo modulo
    AZP_URL URL dell'organizzazione di Azure DevOps (Nessuno)
    AZP_TOKEN Token di accesso personale (Nessuno)
    AZP_AGENT_NAME Nome dell'agente visualizzato in Azure DevOps Nome host del sistema
    AZP_POOL Nome del pool di agenti Predefinita
    AZP_WORK Directory di lavoro per l'agente per eseguire attività di compilazione _Lavoro

    Se lo script non fornisce un valore predefinito per una variabile non impostata, lo script stampa un messaggio di errore e termina immediatamente.

    Nei passaggi seguenti impostare queste variabili di ambiente:

    • AZP_AGENT_VERSION
    • AZP_URL
    • AZP_TOKEN
    • AZP_AGENT_NAME
    • AZP_POOL

    Per il momento, è consigliabile lasciare invariate le altre variabili.

  3. Impostare la AZP_AGENT_NAME variabile di ambiente per specificare il nome dell'agente. È consigliabile usare MyLinuxAgent.

    export AZP_AGENT_NAME=MyLinuxAgent
    
  4. Impostare la AZP_URL variabile di ambiente per specificare l'URL dell'organizzazione di Azure DevOps.

    Sostituire <organization> con il nome della propria organizzazione. È possibile ottenere il nome dalla scheda del browser che visualizza Azure DevOps.

    export AZP_URL=https://dev.azure.com/organization
    
  5. Impostare la AZP_TOKEN variabile di ambiente per specificare il token di accesso personale (il valore del token lungo copiato in precedenza in questa unità).

    Sostituire <token> con il proprio token.

    export AZP_TOKEN=token
    
  6. Impostare la AZP_POOL variabile di ambiente per specificare il nome del pool di agenti. In precedenza è stato creato un pool denominato MyAgentPool.

    export AZP_POOL=MyAgentPool
    
  7. Impostare la AZP_AGENT_VERSION variabile di ambiente per specificare la versione più recente dell'agente.

    export AZP_AGENT_VERSION=$(curl -s https://api.github.com/repos/microsoft/azure-pipelines-agent/releases | jq -r '.[0].tag_name' | cut -d "v" -f 2)
    

    Una pipeline YAML in un computer Linux deve usare la versione più recente dell'agente, anche se è in versione non definitiva. Il software dell'agente viene aggiornato costantemente, quindi è possibile usare curl per ottenere le informazioni sulla versione dal repository GitHub. Il comando usa jq per leggere la versione più recente dalla stringa JSON restituita.

  8. Stampare la versione dell'agente nella console. Facoltativamente, verificare che sia la versione più recente.

    echo $AZP_AGENT_VERSION
    
  9. Rendere eseguibile lo script, quindi eseguirlo:

    chmod u+x build-agent.sh
    sudo -E ./build-agent.sh
    

    sudo consente l'esecuzione dello script come utente radice. L'argomento -E conserva le variabili di ambiente correnti, incluse quelle impostate, in modo che siano disponibili per lo script.

    Durante l'esecuzione dello script, è possibile vedere che l'agente si connette ad Azure DevOps, vedere che è stato aggiunto al pool di agenti e vedere la connessione dell'agente da testare.

Verificare che l'agente sia in esecuzione

Sono stati installati correttamente gli strumenti di compilazione e il software agente nella macchina virtuale. Come passaggio di verifica, passare ad Azure DevOps e visualizzare l'agente nel pool di agenti.

  1. In Azure DevOps passare al progetto Space Game - Web - Agent .

  2. Selezionare Impostazioni progetto.

  3. In Pipeline selezionare Pool di agenti.

  4. Selezionare MyAgentPool.

  5. Selezionare la scheda Agenti .

    È possibile notare che l'agente è online e pronto ad accettare processi di compilazione.

    A screenshot of Azure DevOps showing the status of the private agent. The agent shows as online, idle, and enabled.

    Suggerimento

    Se l'agente di compilazione viene visualizzato come Offline, provare ad attendere alcuni istanti e quindi aggiornare la pagina.

  6. Selezionare l'agente MyLinuxAgent.

  7. Fare clic sulla scheda Funzionalità.

    Durante l'installazione, il processo di configurazione ha analizzato l'agente di compilazione per individuare le funzionalità degli strumenti. Si noterà che npm è elencato come uno di essi. Tenere presente che la configurazione di compilazione originale specificata deve npm essere installata nell'agente.

    A screenshot of Azure DevOps showing a few of the agent's capabilities. The npm capability is highlighted.

    Quando si specifica il pool di agenti da usare, è possibile includere una di queste voci nella demands sezione. Includerli garantisce che Azure Pipelines scelga un agente di compilazione con il software necessario per compilare l'applicazione. Consente anche di creare pool di agenti con varie configurazioni software. Azure Pipelines selezionerà la configurazione corretta in base ai requisiti.