Ö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 gör du följande:
- Skapa en virtuell Ubuntu-dator i Azure som ska vara din byggagent.
- Skapa en agentpool i Microsoft Azure DevOps.
- Skapa en åtkomsttoken som autentiserar din agent med Azure DevOps.
- Konfigurera din agent med den programvara som krävs för att skapa webbplatsen space game .
- Konfigurera din agent till 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 i 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:
- I Linux VM 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 där alla program är förinstallerade.
Att konfigurera ett system interaktivt är ett bra sätt att komma igång på, 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.
Kommentar
Om du inte är bekant med att ansluta till eller konfigurera Linux-system följer du bara med. Du kan använda samma koncept 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-webbappen. Du konfigurerar detta om en stund.
Ta upp Cloud Shell via Azure-portalen
Viktigt!
För att slutföra övningarna i den här modulen behöver du en egen Azure-prenumeration.
Gå till Azure Portal och logga in.
Välj Cloud Shell på menyn. När du uppmanas till det väljer du Bash-upplevelsen.
Kommentar
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 inom en geografisk plats. USA, östra, USA, västra och Europa, norra ä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
Name
I kolumnen 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 har valt: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.
Kör följande
az group create
kommando för att skapa en resursgrupp med namnet tailspin-space-game-rg:az group create --name tailspin-space-game-rg
Skapa den virtuella datorn
Kör följande az vm create
kommando för att skapa den virtuella datorn:
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 dess processorhastighet, mängden minne och förväntad nätverksbandbredd. Det här är samma storlek som tillhandahålls av Microsoft-värdbaserade agenter. I praktiken kan du välja en storlek som ger mer beräkningskraft eller ytterligare funktioner, till exempel grafikbearbetning.
--resource-group
-argumentet anger den resursgrupp som innehåller allt som behövs för att skapa datorn. Med en resursgrupp kan du administrera alla virtuella datorer, diskar, nätverksgränssnitt och andra element som utgör lösningen som en enhet.
Skapa agentpoolen
Kom ihåg att en agentpool organiserar byggagenter. I det här avsnittet skapar du agentpoolen i Azure DevOps. Senare ska du ange namnet på agentpoolen när du konfigurerar din agent, så att den kan registrera sig själv till rätt pool.
I Azure DevOps går du till projektet Space Game – web – Agent .
Välj Projektinställningar.
Välj Agentpooler under Pipelines.
Välj Lägg till pool.
I fönstret Lägg till pool :
- Under Pool för att länka väljer du Nytt.
- Under Pooltyp väljer du Lokalt installerad.
- Under Namn anger du 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.
Viktigt!
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 på din token, exempelvis Byggagent.
Under Omfång väljer du länken Visa alla omfång längst ned.
Leta efter agentpooler och välj sedan Läs och hantera.
Välj Skapa.
Kopiera din token till en säker plats.
Snart kommer du använda din token för att aktivera att din byggagent tillåter åtkomst till Azure-pipelines.
Ansluta till din virtuella dator
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 Microsoft-värdbaserad agent. 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 i Cloud Shell för att hämta den virtuella datorns IP-adress
az vm show
:IPADDRESS=$(az vm show \ --name MyLinuxAgent \ --resource-group tailspin-space-game-rg \ --show-details \ --query [publicIps] \ --output tsv)
Kommandot sparar IP-adressen i Bash-variabeln
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 den befintliga byggprocessen använder följande verktyg:
- .NET SDK, som används för att skapa programmet
- Node.js, som används till 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.
Kommentar
Byggprocessen använder andra verktyg, till exempel node-sass, för att konvertera Sass-filer (.scss) till CSS-filer (.css). Node.js installerar dock de här verktygen 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
DOTNET_VERSION
ange miljövariabeln 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 programkomponent har installerats.
Installera agentprogramvara på din virtuella dator
Nu är det dags att installera agentprogrammet på den virtuella datorn. Med den här programvaran fungerar den virtuella datorn som byggagent och tar emot byggjobb från Azure-pipelines.
Registreringsprocessen söker efter installerade program innan det 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 vill installera ytterligare programvara.
Dokumentationen beskriver 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.
Viktigt!
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 version av agentprogrammet som ska installeras Den version som vi senast använde för att testa modulen AZP_URL
URL:en för din Azure DevOps-organisation (Ingen) AZP_TOKEN
Din personliga åtkomsttoken (Ingen) AZP_AGENT_NAME
Din agents namn som det visas i Azure DevOps Systemets värddatornamn AZP_POOL
Namnet på din agentpool Standardvärde AZP_WORK
Arbetskatalogen för att agenten som ska utföra bygguppgifter _work 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 inte anger något för de andra variablerna.
Konfigurera
AZP_AGENT_NAME
-miljövariabeln för att ange namnet på din agent. Vi rekommenderar MyLinuxAgent.export AZP_AGENT_NAME=MyLinuxAgent
AZP_URL
Ange miljövariabeln för att ange URL:en till din Azure DevOps-organisation.Ersätt <organisationen> med din. Du kan hämta namnet från webbläsarfliken som visar Azure DevOps.
export AZP_URL=https://dev.azure.com/organization
AZP_TOKEN
Ange miljövariabeln för att ange din personliga åtkomsttoken (det långa tokenvärde som du kopierade tidigare i den här lektionen).Ersätt <token> med din token.
export AZP_TOKEN=token
Konfigurera
AZP_POOL
-miljövariabeln för att ange namnet på agentpoolen. Tidigare skapade du en pool med namnet MyAgentPool.export AZP_POOL=MyAgentPool
AZP_AGENT_VERSION
Ange miljövariabeln 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
får versionsinformationen från GitHub-lagringsplatsen. 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 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
Med
sudo
kan skriptet köras som rotanvändare. Argumentet-E
bevarar de aktuella miljövariablerna, inklusive de som 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.
Välj Agentpooler under Pipelines.
Välj MyAgentPool.
Välj fliken Agenter.
Du kan se att din agent är online och redo att acceptera byggjobb.
Dricks
Om byggagenten visas som Offline kan du försöka vänta en stund och sedan uppdatera sidan.
Välj din agent, MyLinuxAgent.
Välj fliken Funktioner.
Under konfigurationsprocessen genomsöks din byggagent efter verktygsfunktioner. Du ser att
npm
visas som en av dem. Kom ihåg att din ursprungliga byggkonfiguration som angavs somnpm
, måste vara installerad 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.