Övning – Skapa en byggagent som körs i Azure
I den här lektionen använder du en virtuell dator som körs på Microsoft Azure för att konfigurera en byggagent som du kan använda i Microsoft Azure Pipelines. Vi tillhandahåller en virtuell dator som du kan använda under hela den här modulen.
I den här lektionen kommer du att:
- Skapa en virtuell Ubuntu-dator i Azure för att fungera som byggagent.
- Skapa en agentpool i Microsoft Azure DevOps.
- Skapa en åtkomsttoken för att autentisera din agent med Azure DevOps.
- Konfigurera din agent med den programvara som krävs för att skapa webbplatsen Space Game.
- Konfigurera din agent för att ansluta till Azure DevOps så att den kan ta emot byggjobb.
- Kontrollera att agenten är ansluten till Azure DevOps och redo att ta emot byggjobb.
Det finns många sätt att skapa en virtuell dator på Azure. I den här lektionen skapar du en virtuell Ubuntu-dator med hjälp av en interaktiv terminal med namnet Cloud Shell.
För att konfigurera den virtuella datorn har du flera alternativ:
- För en virtuell Linux-dator kan du ansluta direkt via SSH och interaktivt konfigurera systemet.
- Du kan automatisera distributionen med hjälp av en ARM-mall, Bicep eller något annat automatiserat etableringsverktyg.
- Om du behöver distribuera många byggagenter kan du skapa en VM-avbildning som har all programvara förinstallerad.
Att konfigurera ett system interaktivt är ett bra sätt att komma igång eftersom det hjälper dig att förstå processen och vad som behövs. För att förenkla processen ansluter du till din virtuella Ubuntu-dator via SSH och kör shell-skript för att konfigurera byggagenten.
Notera
Om du inte är bekant med att ansluta till eller konfigurera Linux-system kan du enkelt följa med. Du kan använda samma begrepp för Windows-byggagenter.
Skapa en virtuell Linux-dator
I det här avsnittet skapar du en virtuell dator som kör Ubuntu 20.04, som fungerar som byggagent. Den virtuella datorn har ännu inte konfigurerats för att vara en byggagent eller ha något av de verktyg som krävs för att skapa Space Game webbapp. Du kommer snart att konfigurera det.
Ta upp Cloud Shell via Azure-portalen
Viktig
För att slutföra övningarna i den här modulen behöver du en egen Azure-prenumeration.
Gå till Azure-portalen och logga in.
På menyn väljer du Cloud Shell-. När du uppmanas till det väljer du Bash-upplevelse.
Not
Cloud Shell kräver att en Azure-lagringsresurs bevarar alla filer som du skapar i Cloud Shell. När du först öppnar Cloud Shell uppmanas du att skapa en resursgrupp, ett lagringskonto och en Azure Files-resurs. Den här konfigurationen används automatiskt för alla framtida Cloud Shell-sessioner.
Välj en Azure-region
En region är ett eller flera Azure-datacenter på en geografisk plats. Östra USA, Västra USA och Norra Europa är exempel på regioner. Varje Azure-resurs, inklusive en virtuell Azure-dator, tilldelas en region.
Om du vill göra kommandon enklare att köra börjar du med att välja en standardregion. När du har angett standardregionen använder senare kommandon den regionen om du inte anger en annan region.
Kör följande
az account list-locations
kommando från Cloud Shell för att visa en lista över de regioner som är tillgängliga från din Azure-prenumeration:az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
I kolumnen
Name
i utdata väljer du en region som är nära dig. Välj till exempeleastasia
ellerwestus2
.Kör
az configure
för att ange din standardregion. Ersätt<REGION>
med namnet på den region som du valde:az configure --defaults location=<REGION>
I det här exemplet anges
westus2
som standardregion:az configure --defaults location=westus2
Skapa en resursgrupp
Skapa en resursgrupp som ska innehålla de resurser som används i den här utbildningsmodulen.
Om du vill skapa en resursgrupp med namnet tailspin-space-game-rgkör du följande
az group create
kommando:az group create --name tailspin-space-game-rg
Skapa den virtuella datorn
Skapa den virtuella datorn genom att köra följande az vm create
kommando:
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
Det tar några minuter att komma fram till den virtuella datorn.
Standard_DS2_v2 anger den virtuella datorns storlek. En virtuell dators storlek definierar processorhastigheten, mängden minne, den initiala mängden lagring och förväntad nätverksbandbredd. Det här är samma storlek som tillhandahålls av agenter som hanteras av Microsoft. I praktiken kan du välja en storlek som ger mer beräkningskraft eller ytterligare funktioner, till exempel grafikbearbetning.
Argumentet --resource-group
anger resursgrupp som innehåller alla saker som vi behöver skapa. Med en resursgrupp kan du administrera alla virtuella datorer, diskar, nätverksgränssnitt och andra element som utgör vår lösning som en enhet.
Skapa agentpoolen
Tänk på att en agentpool organiserar byggagenter. I det här avsnittet skapar du agentpoolen i Azure DevOps. Senare anger du namnet på agentpoolen när du konfigurerar agenten så att den kan registrera sig i rätt pool.
I Azure DevOps går du till projektet Space Game – web – Agent.
Välj projektinställningar.
Under Pipelinesväljer du Agentpooler.
Välj Lägg till pool.
I fönstret Lägg till pool:
- Under Pool för att länkaväljer du Ny.
- Under Pooltypväljer du Lokalt installerad.
- Under Namn, ange MyAgentPool.
I praktiken väljer du ett mer beskrivande namn för din pool.
Välj Skapa. Den nya agentpoolen visas i listan.
Skapa en personlig åtkomsttoken
För att din byggagent ska kunna registrera sig med Azure DevOps behöver du ett sätt för den att autentisera sig själv.
För att göra det kan du skapa en personlig åtkomsttoken. En personlig åtkomsttoken – eller PAT – är ett alternativ till ett lösenord. Du kan använda PAT för att autentisera med tjänster som Azure DevOps.
Viktig
Som med ett lösenord bör du hålla din åtkomsttoken på en säker plats. I det här avsnittet ska du lagra din åtkomsttoken som en miljövariabel så att den inte visas i shell-skriptet.
Öppna profilinställningarna i Azure DevOps och välj sedan Personliga åtkomsttoken.
Välj Ny token.
Ange ett namn för din token, till exempel Build-agent.
Under Scopesväljer du länken Visa alla omfång längst ned.
Leta efter agentpooleroch välj sedan Läs & hantera.
Välj Skapa.
Kopiera token till en säker plats.
Inom kort använder du din token för att aktivera byggagenten för att autentisera åtkomsten till Azure Pipelines.
Ansluta till den virtuella datorn
I det här avsnittet ansluter du till den virtuella Linux-datorn via SSH så att du kan konfigurera den.
Kom ihåg att du inte kan logga in interaktivt på en agent som är värd för Microsoft. Eftersom en privat byggagent är din egen kan du logga in på och konfigurera den hur du vill.
Med möjligheten att ansluta till byggagenten kan du konfigurera den med de verktyg du behöver för att skapa din programvara. Du kan också felsöka problem när du skapar pipelinekonfigurationen.
Kör
az vm show
i Cloud Shell för att hämta den virtuella datorns IP-adress:IPADDRESS=$(az vm show \ --name MyLinuxAgent \ --resource-group tailspin-space-game-rg \ --show-details \ --query [publicIps] \ --output tsv)
Det här kommandot lagrar IP-adressen i en Bash-variabel med namnet
IPADDRESS
.Skriv ut den virtuella datorns IP-adress till konsolen:
echo $IPADDRESS
Skapa en SSH-anslutning till den virtuella datorn. I stället för $IPADDRESS anger du den IP-adress som du fick i föregående steg. I kommandotolken anger du ja för att fortsätta ansluta.
ssh azureuser@$IPADDRESS
Nu är du ansluten till den virtuella datorn via SSH.
Det här kommandot fungerar eftersom du angav alternativet
--generate-ssh-keys
när du kördeaz vm create
tidigare. Det här alternativet skapar ett SSH-nyckelpar som gör att du kan logga in på den virtuella datorn.
Installera byggverktyg på den virtuella datorn
I det här avsnittet konfigurerar du den virtuella datorn med de verktyg som krävs för att skapa webbplatsen Space Game.
Kom ihåg att din befintliga byggprocess använder följande verktyg:
- .NET SDK, som används för att skapa programmet
- Node.js, som används för att utföra bygguppgifter
- npm, pakethanteraren för Node.js
- gulp, ett Node.js paket som används för att minimera JavaScript- och CSS-filer
Det här är de viktigaste verktygen som byggprocessen kräver. Om du vill installera dem laddar du ned och kör ett gränssnittsskript från GitHub.
Anteckning
Byggprocessen använder andra verktyg, till exempel node-sass, för att konvertera Sass-filer (.scss) till CSS-filer (.css). Men Node.js installerar dessa verktyg när bygget körs.
Vi börjar med att uppdatera Ubuntu-pakethanteraren med namnet apt. Den här åtgärden hämtar den senaste informationen från paketlagringsplatserna och är vanligtvis det första du gör när du konfigurerar ett nytt Ubuntu-system.
I din SSH-anslutning uppdaterar du apt Package Manager-cachen:
sudo apt-get update
sudo
kör kommandot med administratörsbehörighet eller rotbehörighet.Om du vill ladda ned ett gränssnittsskript med namnet build-tools.sh från GitHub kör du följande
curl
kommando:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
Skriv ut skriptet till terminalen så att du kan undersöka dess innehåll:
cat build-tools.sh
Följande resultat visas:
#!/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
Skriptet installerar Node.js, npm, gulp och .NET Core.
Genom att ange miljövariabeln
DOTNET_VERSION
kan du ange den .NET-version som ska installeras. Om du inte anger den här variabeln installerar skriptet den version som din befintliga byggkonfiguration använder. I utbildningssyfte anger du inte den här variabeln. Du tillåter att skriptet använder standardversionen.Gör skriptet körbart och kör sedan skriptet:
chmod u+x build-tools.sh sudo ./build-tools.sh
Det tar några minuter att köra skriptet.
I praktiken kan du nu köra kommandon för att kontrollera att varje programvarukomponent har installerats.
Installera agentprogramvara på den virtuella datorn
Nu är det dags att installera agentprogramvaran på den virtuella datorn. Med den här programvaran kan den virtuella datorn fungera som byggagent och ta emot byggjobb från Azure Pipelines.
Registreringsprocessen söker efter installerad programvara innan den registrerar agenten med Azure Pipelines. Därför är det viktigt att konfigurera agenten när du har installerat all annan programvara. I praktiken kan du registrera agenten en andra gång om du behöver installera ytterligare programvara.
Dokumentationen förklarar hur du manuellt konfigurerar lokalt installerade Linux-agenter samt macOS- och Windows-agenter. Du kör ett gränssnittsskript för att konfigurera agenten på ungefär samma sätt som du konfigurerade byggverktyg i föregående avsnitt.
Viktig
Skriptet som du kör här är i utbildningssyfte. I praktiken bör du först förstå hur varje kommando i skripten som du skapar påverkar det övergripande systemet. I slutet av modulen pekar vi på dokumentation som mer fullständigt beskriver dina alternativ.
Om du vill ladda ned ett gränssnittsskript med namnet build-agent.sh från GitHub kör du följande
curl
kommando:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
Skriv ut skriptet till terminalen så att du kan undersöka dess innehåll:
cat build-agent.sh
Följande resultat visas:
#!/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
Du behöver inte förstå hur varje rad fungerar, men här är en kort sammanfattning av vad det här skriptet gör:
- Den laddar ned agentpaketet som en .tar.gz fil och extraherar dess innehåll.
- Skriptet i de extraherade filerna:
- Kör ett gränssnittsskript med namnet installdependencies.sh för att installera agentprogramvaran.
- Kör ett gränssnittsskript med namnet config.sh för att konfigurera agenten och registrera agenten med Azure Pipelines.
- Kör ett gränssnittsskript med namnet svc.sh för att installera och starta agenttjänsten.
Skriptet använder miljövariabler så att du kan ange information om din Azure DevOps-organisation. Här är en sammanfattning:
Bash-variabel Beskrivning Standard AZP_AGENT_VERSION
Den -versionen av agentprogramvaran som ska installeras Den version som vi senast använde för att testa den här modulen AZP_URL
URL:en för din Azure DevOps-organisation (Ingen) AZP_TOKEN
Din personliga åtkomsttoken (Ingen) AZP_AGENT_NAME
Agentens namn som visas i Azure DevOps Systemets värdnamn AZP_POOL
Namnet på din agentpool Standardinställning AZP_WORK
Arbetskatalogen för agenten för att utföra bygguppgifter _arbete Om skriptet inte anger ett standardvärde för en variabel som inte har angetts skriver skriptet ut ett felmeddelande och avslutas omedelbart.
I stegen nedan anger du följande miljövariabler:
AZP_AGENT_VERSION
AZP_URL
AZP_TOKEN
AZP_AGENT_NAME
AZP_POOL
För tillfället rekommenderar vi att du lämnar de andra variablerna inte inställda.
Ange miljövariabeln
AZP_AGENT_NAME
för att ange agentens namn. Vi rekommenderar MyLinuxAgent.export AZP_AGENT_NAME=MyLinuxAgent
Ange
AZP_URL
miljövariabeln för att ange URL:en till din Azure DevOps-organisation.Ersätt <organisation> med din. Du kan hämta namnet från webbläsarfliken som visar Azure DevOps.
export AZP_URL=https://dev.azure.com/organization
Ange
AZP_TOKEN
miljövariabeln för att ange din personliga åtkomsttoken (det långa tokenvärde som du kopierade tidigare i den här enheten).Ersätt <token> med din token.
export AZP_TOKEN=token
Ange miljövariabeln
AZP_POOL
för att ange namnet på agentpoolen. Tidigare skapade du en pool med namnet MyAgentPool.export AZP_POOL=MyAgentPool
Ange
AZP_AGENT_VERSION
miljövariabel för att ange den senaste versionen av agenten.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)
En YAML-pipeline på en Linux-dator måste använda den senaste versionen av agenten, även om den är förhandsversion. Agentprogramvaran uppdateras ständigt, så du
curl
versionsinformationen från GitHub-repot. Kommandot använderjq
för att läsa den senaste versionen från JSON-strängen som returneras.Skriv ut agentversionen till konsolen. Du kan också kontrollera för att se till att det här är den senaste versionen.
echo $AZP_AGENT_VERSION
Gör skriptet körbart och kör det sedan:
chmod u+x build-agent.sh sudo -E ./build-agent.sh
sudo
gör att skriptet kan köras som rotanvändare. Argumentet-E
bevarar de aktuella miljövariablerna, inklusive de du anger, så att de är tillgängliga för skriptet.När skriptet körs kan du se agenten ansluta till Azure DevOps, se den läggas till i agentpoolen och se agentanslutningen testas.
Kontrollera att agenten körs
Du har installerat byggverktygen och agentprogramvaran på den virtuella datorn. Som ett verifieringssteg går du till Azure DevOps och ser din agent i agentpoolen.
I Azure DevOps går du till projektet Space Game – web – Agent.
Välj Projektinställningar.
Under Pipelinesväljer du Agentpooler.
Välj MyAgentPool.
Välj fliken Agenter.
Du kan se att din agent är online och redo att acceptera byggjobb.
Tips
Om din byggagent visas som offlinekan du prova att vänta en stund och sedan uppdatera sidan.
Välj din agent MyLinuxAgent.
Välj fliken Funktioner.
Under installationen genomsökte konfigurationsprocessen din byggagent efter verktygskapabiliteter. Du ser att
npm
visas som en av dem. Kom ihåg att den ursprungliga byggkonfigurationen angav attnpm
måste installeras på agenten.När du anger vilken agentpool som ska användas kan du inkludera någon av dessa poster i ditt
demands
avsnitt. Att inkludera dem säkerställer att Azure Pipelines väljer en byggagent som har den programvara som du behöver för att skapa ditt program. Du kan också skapa agentpooler med olika programvarukonfigurationer. Azure Pipelines väljer rätt konfiguration baserat på dina krav.