Esercizio - Creare un agente di compilazione in esecuzione in Azure
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.
Aprire il portale di Azure e accedere.
Dal menu selezionare Cloud Shell. Quando viene richiesto, selezionare l'esperienza Bash.
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.
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
Name
Nella colonna nell'output selezionare un'area vicina all'utente. Ad esempio, scegliereeastasia
owestus2
.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.
In Azure DevOps passare al progetto Space Game - Web - Agent .
Selezionare Impostazioni progetto.
In Pipeline selezionare Pool di agenti.
Selezionare Aggiungi pool.
Nella finestra Aggiungi pool :
- In Pool da collegare selezionare Nuovo.
- In Tipo di pool selezionare Self-hosted.
- In Nome immettere MyAgentPool.
In pratica, scegliere un nome più descrittivo per il pool.
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.
In Azure DevOps aprire le impostazioni del profilo e quindi selezionare Token di accesso personali.
Selezionare Nuovo token.
Immettere un nome per il token, ad esempio l'agente di compilazione.
In Ambiti selezionare il collegamento Mostra tutti gli ambiti nella parte inferiore.
Cercare Pool di agenti, quindi selezionare Lettura e gestione.
Seleziona Crea.
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.
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
.Stampare l'indirizzo IP della macchina virtuale nella console:
echo $IPADDRESS
Creare una connessione SSH alla macchina virtuale. Al posto di $IPADDRESS, immettere l'indirizzo IP ricevuto nel passaggio precedente. Al prompt immettere sì 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 eseguitaaz 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.
Nella connessione SSH aggiornare la cache apt package manager:
sudo apt-get update
sudo
esegue il comando con privilegi di amministratore o radice.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
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.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.
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
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.
Impostare la
AZP_AGENT_NAME
variabile di ambiente per specificare il nome dell'agente. È consigliabile usare MyLinuxAgent.export AZP_AGENT_NAME=MyLinuxAgent
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
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
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
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 usajq
per leggere la versione più recente dalla stringa JSON restituita.Stampare la versione dell'agente nella console. Facoltativamente, verificare che sia la versione più recente.
echo $AZP_AGENT_VERSION
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.
In Azure DevOps passare al progetto Space Game - Web - Agent .
Selezionare Impostazioni progetto.
In Pipeline selezionare Pool di agenti.
Selezionare MyAgentPool.
Selezionare la scheda Agenti .
È possibile notare che l'agente è online e pronto ad accettare processi di compilazione.
Suggerimento
Se l'agente di compilazione viene visualizzato come Offline, provare ad attendere alcuni istanti e quindi aggiornare la pagina.
Selezionare l'agente MyLinuxAgent.
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 devenpm
essere installata nell'agente.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.