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

  1. Gå till Azure Portal och logga in.

  2. Välj Cloud Shell på menyn. När du uppmanas till det väljer du Bash-upplevelsen.

    A screenshot of the Azure portal showing the location of the Cloud Shell menu item.

    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.

  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. Name I kolumnen 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 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.

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

  2. Välj Projektinställningar.

  3. Välj Agentpooler under Pipelines.

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

  4. Välj Lägg till pool.

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

    1. Under Pool för att länka väljer du Nytt.
    2. Under Pooltyp väljer du Lokalt installerad.
    3. Under Namn anger du 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.

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.

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

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

  2. Välj Ny token.

  3. Ange ett namn på din token, exempelvis Byggagent.

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

  5. Leta efter agentpooler och välj sedan Läs och hantera.

  6. Välj Skapa.

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

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

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

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

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

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

  3. Konfigurera AZP_AGENT_NAME-miljövariabeln för att ange namnet på din agent. Vi rekommenderar MyLinuxAgent.

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

    export AZP_POOL=MyAgentPool
    
  7. 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ä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 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
    

    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.

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

  2. Välj Projektinställningar.

  3. Välj Agentpooler under Pipelines.

  4. Välj MyAgentPool.

  5. Välj fliken Agenter.

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

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

    Dricks

    Om byggagenten visas som Offline kan du försöka vänta en stund och sedan uppdatera sidan.

  6. Välj din agent, MyLinuxAgent.

  7. 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 som npm, måste vara installerad på agenten.

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

    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.