Oefening: een buildagent maken die wordt uitgevoerd in Azure

Voltooid

In deze les gebruikt u een virtuele machine die wordt uitgevoerd op Microsoft Azure Azure om een buildagent te configureren die u kunt gebruiken in Microsoft Azure Pipelines. We bieden een virtuele machine die u kunt gebruiken voor de duur van deze module.

In deze les gaat u:

  • Maak een virtuele Ubuntu-machine in Azure om als buildagent te dienen.
  • Maak een agentpool in Microsoft Azure DevOps.
  • Maak een toegangstoken voor verificatie van de agent met Azure DevOps.
  • Configureer uw agent met de software die nodig is om de Space Game-website te bouwen.
  • Configureer de agent om verbinding te maken met Azure DevOps, zodat deze buildtaken kan ontvangen.
  • Controleer of de agent is verbonden met Azure DevOps en klaar is om buildtaken te ontvangen.

Er zijn veel manieren om een virtuele machine in Azure te maken. In deze les maakt u een virtuele Ubuntu-machine met behulp van een interactieve terminal met de naam Cloud Shell.

Als u uw VM wilt configureren, hebt u verschillende opties:

  • U kunt bij een virtuele Linux-machine rechtstreeks verbinding maken via SSH en uw systeem interactief configureren.
  • U kunt de implementatie automatiseren met behulp van een ARM-sjabloon, Bicep of een ander hulpprogramma voor geautomatiseerde inrichting.
  • Als u veel buildagents moet implementeren, kunt u een VM-installatiekopie maken waarop alle software vooraf wordt geïnstalleerd.

Een systeem interactief configureren is een goede manier om te beginnen, omdat dit helpt het proces te begrijpen en inzicht te krijgen in wat nodig is. Om het proces te vereenvoudigen, maakt u verbinding met uw Ubuntu-VM via SSH en voert u shellscripts uit om uw buildagent in te stellen.

Notitie

Als u niet bekend bent met het maken van verbinding met of het configureren van Linux-systemen, volgt u gewoon de stappen. U kunt dezelfde concepten toepassen op Windows-buildagents.

Een virtuele Linux-machine maken

In deze sectie maakt u een virtuele machine waarop Ubuntu 20.04 wordt uitgevoerd. Deze fungeert als uw buildagent. De VIRTUELE machine is nog niet ingesteld als een buildagent of heeft een van de hulpprogramma's die nodig zijn om de Space Game-webtoepassing te bouwen. U stelt dit binnenkort in.

Cloud Shell openen via Azure Portal

Belangrijk

Als u de oefeningen in deze module wilt voltooien, hebt u uw eigen Azure-abonnement nodig.

  1. Ga naar Azure Portal en meld u aan.

  2. Selecteer Cloud Shell in het menu. Wanneer u hierom wordt gevraagd, selecteert u de Bash-ervaring .

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

    Notitie

    Voor Cloud Shell is een Azure-opslagresource vereist om alle bestanden die u in Cloud Shell maakt, vast te houden. Wanneer u Cloud Shell voor het eerst opent, wordt u gevraagd om een resourcegroep, opslagaccount en Azure Files-share te maken. Deze installatie wordt automatisch gebruikt voor alle toekomstige Cloud Shell-sessies.

Een Azure-regio selecteren

Een regio is een of meer Azure-datacenters binnen een geografische locatie. VS - oost, VS - west en Europa - noord zijn voorbeelden van regio's. Aan elke Azure-resource, inclusief een Azure-VM, wordt een regio toegewezen.

Als u opdrachten gemakkelijker wilt uitvoeren, selecteert u eerst een standaardregio. Nadat u de standaardregio hebt opgegeven, gebruiken latere opdrachten die regio, tenzij u een andere regio opgeeft.

  1. Voer vanuit Cloud Shell de volgende az account list-locations opdracht uit om de regio's weer te geven die beschikbaar zijn vanuit uw Azure-abonnement:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Selecteer in de Name kolom in de uitvoer een regio dicht bij u in de buurt. Kies eastasia westus2of kies bijvoorbeeld .

  3. Voer uit az configure om uw standaardregio in te stellen. Vervang <REGION> door de naam van de regio die u hebt geselecteerd:

    az configure --defaults location=<REGION>
    

    In dit voorbeeld wordt ingesteld westus2 als de standaardregio:

    az configure --defaults location=westus2
    

Een brongroep maken

Maak een resourcegroep die de resources bevat die in deze trainingsmodule worden gebruikt.

  • Voer de volgende az group create opdracht uit om een resourcegroep te maken met de naam tailspin-space-game-rg:

    az group create --name tailspin-space-game-rg
    

De VM maken

Voer de volgende az vm create opdracht uit om uw virtuele machine te maken:

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

Het duurt enkele minuten voordat uw virtuele machine wordt weergegeven.

Met Standard_DS2_v2 wordt de grootte van de VM aangeduid. De grootte van een VM bepaalt de processorsnelheid, de hoeveelheid geheugen, de aanvankelijke hoeveelheid opslagruimte en de verwachte netwerkbandbreedte. Dit is dezelfde grootte als die wordt geleverd door door Microsoft gehoste agents. In de praktijk kunt u een grootte kiezen die meer rekenkracht of extra mogelijkheden biedt, zoals grafische verwerking.

Met het argument --resource-group wordt de resourcegroep aangeduid waarin zich alle dingen bevinden die we moeten maken. U kunt met een resourcegroep alle VM's, schijven, netwerkinterfaces en andere elementen waaruit onze oplossing bestaat, als een geheel beheren.

De agentpool maken

Zoals u zich herinnert, deelt een agentpool buildagents in. In deze sectie maakt u de agentpool in Azure DevOps. Later geeft u de naam van de agentpool op wanneer u de agent zo configureert dat deze zichzelf bij de juiste pool kan registreren.

  1. Ga in Azure DevOps naar het Space Game - web - Agent-project .

  2. Selecteer Project-instellingen.

  3. Selecteer onder Pipelines de optie Agentpools.

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

  4. Selecteer Groep toevoegen.

  5. In het venster Pool toevoegen:

    1. Selecteer Nieuw onder Groep die u wilt koppelen.
    2. Selecteer onder Pooltype de optie Zelf-hostend.
    3. Voer onder Naam MyAgentPool in.

    In de praktijk kiest u een meer beschrijvende naam voor uw pool.

  6. Selecteer Maken. De nieuwe agentgroep wordt weergegeven in de lijst.

Een persoonlijk toegangstoken maken

Als uw buildagent zichzelf kan registreren bij Azure DevOps, hebt u een manier nodig om zichzelf te verifiëren.

Hiervoor kunt u een persoonlijk toegangstoken maken. Een persoonlijk toegangstoken (of PAT) is een alternatief voor een wachtwoord. U kunt de PAT gebruiken om te verifiëren met services zoals Azure DevOps.

Belangrijk

Net zoals u met een wachtwoord zou doen, moet u uw toegangstoken op een veilige plaats bewaren. In deze sectie slaat u uw toegangstoken op als een omgevingsvariabele, zodat het niet wordt weergegeven in uw shellscript.

  1. Open uw profielinstellingen in Azure DevOps en selecteer vervolgens Persoonlijke toegangstokens.

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

  2. Selecteer Nieuw token.

  3. Voer een naam in voor uw token, zoals Buildagent.

  4. Selecteer onder Bereiken de koppeling Alle bereiken weergeven onderaan.

  5. Zoek naar agentpools en selecteer vervolgens Lezen en beheren.

  6. Selecteer Maken.

  7. Kopieer het token naar een veilige plaats.

    U gebruikt uw token binnenkort om uw buildagent te laten verifiëren voor toegang tot Azure Pipelines.

Verbinding maken met uw VM

In deze sectie maakt u via SSH verbinding met uw Linux-VM, zodat u deze kunt configureren.

U kunt zich niet interactief aanmelden bij een door Microsoft gehoste agent. Omdat een privé-buildagent uw eigen is, kunt u zich aanmelden en configureren zoals u dat wilt.

Met de mogelijkheid om verbinding te maken met uw buildagent kunt u deze configureren met de hulpprogramma's die u nodig hebt om uw software te bouwen. Hiermee kunt u ook problemen oplossen tijdens het bouwen van uw pijplijnconfiguratie.

  1. Voer de volgende opdracht uit az vm show in Cloud Shell om het IP-adres van uw VIRTUELE machine op te halen:

    IPADDRESS=$(az vm show \
      --name MyLinuxAgent \
      --resource-group tailspin-space-game-rg \
      --show-details \
      --query [publicIps] \
      --output tsv)
    

    Met deze opdracht slaat u het IP-adres op in een Bash-variabele met de naam IPADDRESS.

  2. Druk het IP-adres van de VIRTUELE machine af op de console:

    echo $IPADDRESS
    
  3. Maak een SSH-verbinding naar de virtuele machine. Voer in plaats van $IPADDRESS het IP-adres in dat u in de vorige stap hebt ontvangen. Voer bij de prompt ja in om verbinding te blijven maken.

    ssh azureuser@$IPADDRESS
    

    U bent nu verbonden met uw virtuele machine via SSH.

    Deze opdracht werkt omdat u de optie --generate-ssh-keys hebt opgegeven toen u az vm create in een eerder stadium uitvoerde. Met deze optie maakt u een SSH-sleutelpaar, waarmee u zich kunt aanmelden bij de virtuele machine.

Buildhulpprogramma's op uw VM installeren

In deze sectie configureert u uw VIRTUELE machine met de hulpprogramma's die nodig zijn om de Space Game-website te bouwen.

Zoals u zich herinnert, gebruikt uw bestaande buildproces de volgende hulpprogramma's:

  • .NET SDK, die wordt gebruikt om de toepassing te bouwen
  • Node.js, waarmee buildtaken worden uitgevoerd
  • npm, het pakketbeheerprogramma voor Node.js
  • gulp, een Node.js-pakket dat wordt gebruikt om JavaScript- en CSS-bestanden te minificeren

Dit zijn de belangrijkste hulpprogramma's die het buildproces vereist. Als u ze wilt installeren, downloadt en voert u een shellscript uit vanuit GitHub.

Notitie

Het buildproces maakt gebruik van andere hulpprogramma's, zoals node-sass, om Sass-bestanden (.scss)-bestanden te converteren naar CSS-bestanden (.css). Node.js installeert echter deze hulpprogramma's als de build wordt uitgevoerd.

Laten we beginnen met het bijwerken van ubuntu-pakketbeheer met de naam apt. Met deze actie wordt de meest recente informatie opgehaald uit de pakketopslagplaatsen en wordt meestal het eerste wat u doet wanneer u een nieuw Ubuntu-systeem instelt.

  1. Werk in uw SSH-verbinding de apt package manager-cache bij:

    sudo apt-get update
    

    sudo voert de opdracht uit met administrator- of hoofdbevoegdheden.

  2. Voer de volgende curl opdracht uit om een shellscript met de naam build-tools.sh te downloaden vanuit GitHub:

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
    
  3. Druk het script af naar de terminal, zodat u de inhoud ervan kunt bekijken:

    cat build-tools.sh
    

    Het volgende resultaat wordt weergegeven:

    #!/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
    

    Het script installeert Node.js, npm, gulp en .NET Core.

    Door de DOTNET_VERSION omgevingsvariabele in te stellen, kunt u de .NET-versie opgeven die moet worden geïnstalleerd. Als u deze variabele niet instelt, installeert het script de versie die uw bestaande buildconfiguratie gebruikt. Voor leerdoeleinden stelt u deze variabele niet in. U staat toe dat het script de standaardversie gebruikt.

  4. Maak het uitvoerbare script en voer het script uit:

    chmod u+x build-tools.sh
    sudo ./build-tools.sh
    

    Het uitvoeren van het script duurt enkele minuten.

    In de praktijk kunt u nu opdrachten uitvoeren om te controleren of elk softwareonderdeel is geïnstalleerd.

Agentsoftware installeren op uw VM

Het is nu tijd om de agentsoftware op de VM te installeren. Met deze software fungeert de VM als een buildagent en ontvangt deze buildtaken van Azure Pipelines.

Het registratieproces controleert op geïnstalleerde software voordat de agent bij Azure Pipelines wordt geregistreerd. Daarom is het belangrijk om de agent in te stellen nadat u alle andere software hebt geïnstalleerd. In de praktijk kunt u de agent een tweede keer registreren als u extra software moet installeren.

In de documentatie wordt uitgelegd hoe u zelf-hostende Linux-agents en macOS- en Windows-agents handmatig instelt. U voert een shellscript uit om uw agent op ongeveer dezelfde manier te configureren als u buildhulpprogramma's in de vorige sectie instelt.

Belangrijk

Het script dat u hier uitvoert, is bedoeld voor leerdoeleinden. In de praktijk moet u eerst begrijpen hoe elke opdracht in de scripts die u bouwt van invloed is op het algehele systeem. Aan het einde van de module verwijzen we naar documentatie waarin uw opties volledig worden beschreven.

  1. Voer de volgende curl opdracht uit om een shellscript met de naam build-agent.sh te downloaden vanuit GitHub:

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
    
  2. Druk het script af naar de terminal, zodat u de inhoud ervan kunt bekijken:

    cat build-agent.sh
    

    Het volgende resultaat wordt weergegeven:

    #!/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
    

    U hoeft niet te begrijpen hoe elke regel werkt, maar hier volgt een kort overzicht van wat dit script doet:

    • Het agentpakket wordt gedownload als een .tar.gz-bestand en extraheert de inhoud.
    • In de uitgepakte bestanden, het script:
      • Voert een shellscript met de naam installdependencies.sh uit om de agentsoftware te installeren.
      • Voert een shellscript met de naam config.sh uit om de agent te configureren en de agent te registreren bij Azure Pipelines.
      • Voert een shellscript met de naam svc.sh uit om de agentservice te installeren en te starten.

    Het script maakt gebruik van omgevingsvariabelen om u in staat te stellen details over uw Azure DevOps-organisatie op te geven. Hier volgt een samenvatting:

    Bash-variabele Beschrijving Standaard
    AZP_AGENT_VERSION De versie van de agentsoftware die moet worden geïnstalleerd De versie die we het laatst hebben gebruikt om deze module te testen
    AZP_URL De URL van uw Azure DevOps-organisatie (Geen)
    AZP_TOKEN Uw persoonlijke toegangstoken (Geen)
    AZP_AGENT_NAME De naam van uw agent zoals deze wordt weergegeven in Azure DevOps De hostnaam van het systeem
    AZP_POOL De naam van uw agentpool Standaard
    AZP_WORK De werkmap voor de agent om buildtaken uit te voeren _work

    Als het script geen standaardwaarde biedt voor een variabele die niet is ingesteld, wordt er een foutbericht afgedrukt en wordt het script onmiddellijk afgesloten.

    Stel in de volgende stappen de volgende omgevingsvariabelen in:

    • AZP_AGENT_VERSION
    • AZP_URL
    • AZP_TOKEN
    • AZP_AGENT_NAME
    • AZP_POOL

    U wordt aangeraden op dit moment de andere variabelen niet in te stellen.

  3. Stel de omgevingsvariabele AZP_AGENT_NAME in om de naam van uw agent op te geven. Wij raden MyLinuxAgent aan.

    export AZP_AGENT_NAME=MyLinuxAgent
    
  4. Stel de AZP_URL omgevingsvariabele in om de URL op te geven voor uw Azure DevOps-organisatie.

    Vervang <organization> door uw organisatie. U kunt de naam ophalen op het browsertabblad waarin Azure DevOps wordt weergegeven.

    export AZP_URL=https://dev.azure.com/organization
    
  5. Stel de AZP_TOKEN omgevingsvariabele in om uw persoonlijke toegangstoken op te geven (de lange tokenwaarde die u eerder in deze les hebt gekopieerd).

    Vervang <token> door uw token.

    export AZP_TOKEN=token
    
  6. Stel de omgevingsvariabele AZP_POOL in om de naam van uw agentpool op te geven. Eerder hebt u een pool met de naam MyAgentPool gemaakt.

    export AZP_POOL=MyAgentPool
    
  7. Stel de AZP_AGENT_VERSION omgevingsvariabele in om de nieuwste versie van de agent op te geven.

    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)
    

    Een YAML-pijplijn op een Linux-computer moet de nieuwste versie van de agent gebruiken, zelfs als deze vooraf is uitgebracht. De agentsoftware wordt voortdurend bijgewerkt, zodat u curl de versie-informatie van de GitHub-opslagplaats gebruikt. De opdracht gebruikt jq om de nieuwste versie te lezen uit de JSON-tekenreeks die wordt geretourneerd.

  8. Druk de agentversie af naar de console. Controleer desgewenst of dit de nieuwste versie is.

    echo $AZP_AGENT_VERSION
    
  9. Maak het uitvoerbare script en voer het uit:

    chmod u+x build-agent.sh
    sudo -E ./build-agent.sh
    

    Met sudo kan het script als de hoofdgebruiker worden uitgevoerd. Het -E argument behoudt de huidige omgevingsvariabelen, inclusief de omgevingsvariabelen die u hebt ingesteld, zodat ze beschikbaar zijn voor het script.

    Terwijl het script wordt uitgevoerd, ziet u dat de agent verbinding maakt met Azure DevOps, ziet u dat deze is toegevoegd aan de agentgroep en ziet u dat de agentverbinding wordt getest.

Controleer of de agent wordt uitgevoerd

U hebt de buildhulpprogramma's en de agentsoftware op uw VM geïnstalleerd. Als verificatiestap gaat u naar Azure DevOps en bekijkt u uw agent in de agentgroep.

  1. Ga in Azure DevOps naar het Space Game - web - Agent-project .

  2. Selecteer Project-instellingen.

  3. Selecteer onder Pipelines de optie Agentpools.

  4. Selecteer MyAgentPool.

  5. Selecteer het tabblad Agents.

    U kunt zien dat uw agent online is en klaar is om buildtaken te accepteren.

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

    Tip

    Als de buildagent offline wordt weergegeven, wacht u even en vernieuwt u de pagina.

  6. Selecteer uw agent, MyLinuxAgent.

  7. Selecteer het tabblad Mogelijkheden.

    Het configuratieproces heeft tijdens het instellen de buildagent op mogelijkheden voor hulpprogramma's gescand. U ziet dat npm als een van deze mogelijkheden wordt vermeld. Zoals u zich herinnert, werd met de oorspronkelijke buildconfiguratie aangegeven dat npm op de agent moet worden geïnstalleerd.

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

    Wanneer u opgeeft welke agentpool moet worden gebruikt, kunt u een of meer van deze vermeldingen in de sectie demands opnemen. Door ze op te slaan, zorgt u ervoor dat Azure Pipelines een buildagent kiest met de software die u nodig hebt om uw toepassing te bouwen. Hiermee kunt u ook agentgroepen maken met verschillende softwareconfiguraties. Azure Pipelines selecteert de juiste configuratie op basis van uw vereisten.