Övning – Skapa en byggagent som körs i Azure

Slutförd

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.

  1. Gå till Azure-portalen och logga in.

  2. På menyn väljer du Cloud Shell-. När du uppmanas till det väljer du Bash-upplevelse.

    En skärmbild av Azure-portalen som visar platsen för Menyalternativet Cloud Shell.

    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.

  1. 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
    
  2. I kolumnen Name i utdata väljer du en region som är nära dig. Välj till exempel eastasia eller westus2.

  3. 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.

  1. I Azure DevOps går du till projektet Space Game – web – Agent.

  2. Välj projektinställningar.

  3. Under Pipelinesväljer du Agentpooler.

    En skärmbild av projektinställningarna i Azure DevOps som visar platsen för menyalternativet Agentpooler.

  4. Välj Lägg till pool.

  5. I fönstret Lägg till pool:

    1. Under Pool för att länkaväljer du Ny.
    2. Under Pooltypväljer du Lokalt installerad.
    3. Under Namn, ange MyAgentPool.

    I praktiken väljer du ett mer beskrivande namn för din pool.

  6. 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.

  1. Öppna profilinställningarna i Azure DevOps och välj sedan Personliga åtkomsttoken.

    En skärmbild av Azure DevOps som visar platsen för menyalternativet Personliga åtkomsttoken.

  2. Välj Ny token.

  3. Ange ett namn för din token, till exempel Build-agent.

  4. Under Scopesväljer du länken Visa alla omfång längst ned.

  5. Leta efter agentpooleroch välj sedan Läs & hantera.

  6. Välj Skapa.

  7. 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.

  1. 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.

  2. Skriv ut den virtuella datorns IP-adress till konsolen:

    echo $IPADDRESS
    
  3. 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örde az 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.

  1. 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.

  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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.

  3. Ange miljövariabeln AZP_AGENT_NAME för att ange agentens namn. Vi rekommenderar MyLinuxAgent.

    export AZP_AGENT_NAME=MyLinuxAgent
    
  4. 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
    
  5. 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
    
  6. Ange miljövariabeln AZP_POOL för att ange namnet på agentpoolen. Tidigare skapade du en pool med namnet MyAgentPool.

    export AZP_POOL=MyAgentPool
    
  7. 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änder jq för att läsa den senaste versionen från JSON-strängen som returneras.

  8. 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
    
  9. 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.

  1. I Azure DevOps går du till projektet Space Game – web – Agent.

  2. Välj Projektinställningar.

  3. Under Pipelinesväljer du Agentpooler.

  4. Välj MyAgentPool.

  5. Välj fliken Agenter.

    Du kan se att din agent är online och redo att acceptera byggjobb.

    En skärmbild av Azure DevOps som visar status för den privata agenten. Agenten visas som online, inaktiv och aktiverad.

    Tips

    Om din byggagent visas som offlinekan du prova att vänta en stund och sedan uppdatera sidan.

  6. Välj din agent MyLinuxAgent.

  7. 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 att npm måste installeras på agenten.

    En skärmbild av Azure DevOps som visar några av agentens funktioner. NPM-funktionen är markerad.

    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.