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 het volgende doen:

  • Maak een virtuele Ubuntu-machine in Azure om te fungeren als uw buildagent.
  • Maak een agentpool in Microsoft Azure DevOps.
  • Maak een toegangstoken om uw agent te verifiëren met Azure DevOps.
  • Configureer uw agent met de software die is vereist voor het bouwen van de Space Game website.
  • Configureer uw 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 te maken in Azure. 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:

  • Voor een Virtuele Linux-machine kunt u 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 wilt implementeren, kunt u een VM-installatiekopieën maken waarop alle software vooraf is geïnstalleerd.

Het interactief configureren van een systeem is een goede manier om aan de slag te gaan, omdat u hiermee inzicht krijgt in het proces en wat er 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 en heeft geen van de hulpprogramma's die nodig zijn om de Space Game-webtoepassing te bouwen. U stelt dat binnenkort in.

Cloud Shell openen via de Azure-portal

Belangrijk

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

  1. Ga naar de Azure Portal en meld u aan.

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

    Een schermopname van Azure Portal met de locatie van het menu-item Cloud Shell.

    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 die dicht bij u in de buurt is. Kies bijvoorbeeld eastasia of westus2.

  3. Voer az configure uit 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 westus2 ingesteld als de standaardregio:

    az configure --defaults location=westus2
    

Een resourcegroep maken

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

  • Als u een resourcegroep wilt maken met de naam tailspin-space-game-rg, voert u de volgende az group create opdracht uit:

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

De VIRTUELE machine 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 opstart.

Standard_DS2_v2 geeft de grootte van de virtuele machine op. De grootte van een VIRTUELE machine definieert de processorsnelheid, de hoeveelheid geheugen, de initiële hoeveelheid opslagruimte en de verwachte netwerkbandbreedte. Dit is dezelfde grootte als die geleverd wordt 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 opgegeven die alle dingen bevat die we moeten maken. Met een resourcegroep kunt u alle VM's, schijven, netwerkinterfaces en andere elementen beheren waaruit onze oplossing bestaat als een eenheid.

De agentpool maken

Onthoud dat een agentenpool buildagents organiseert. In deze sectie maakt u de agentpool in Azure DevOps. Later geeft u de naam van de agentgroep op wanneer u de agent configureert, zodat deze zich 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 Pipelinesde Agent-pools.

    Een schermopname van de projectinstellingen in Azure DevOps met de locatie van het menu-item Agentpools.

  4. Selecteer Groep toevoegen.

  5. In het venster Pool toevoegen:

    1. Selecteer onder Groep omte koppelen Nieuwe.
    2. Selecteer onder pooltypede zelfgehoste.
    3. Voer onder NaamMyAgentPoolin.

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

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

    Een schermopname van Azure DevOps met de locatie van het menu-item Persoonlijke toegangstokens.

  2. Selecteer nieuw token.

  3. Voer een naam in voor uw token, zoals Build-agent.

  4. Selecteer onder Bereikende Alle bereiken weergeven link onderaan.

  5. Zoek agentgroepenen selecteer &beheren.

  6. Selecteer Maakaan.

  7. Kopieer het token naar een veilige plaats.

    Binnenkort gebruikt u uw token om uw buildagent in staat te stellen om toegang tot Azure Pipelines te verifiëren.

Verbinding maken met uw VIRTUELE machine

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 az vm show uit 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 wordt het IP-adres opgeslagen 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 met uw 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 eerder hebt uitgevoerd. Met deze optie maakt u een SSH-sleutelpaar, waarmee u zich kunt aanmelden bij de virtuele machine.

Buildhulpprogramma's installeren op uw VM

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

Denk eraan dat uw bestaande buildproces gebruikmaakt van deze hulpprogramma's:

  • .NET SDK, die wordt gebruikt om de toepassing te bouwen
  • Node.js, die wordt gebruikt om build-taken uit te voeren
  • npm, pakketbeheerder 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) te converteren naar CSS-bestanden (.css). Node.js installeert deze hulpprogramma's echter wanneer 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 rootbevoegdheden.

  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 omgevingsvariabele DOTNET_VERSION 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

Nu is het tijd om de agentsoftware op uw VIRTUELE machine te installeren. Met deze software kan de VIRTUELE machine fungeren als een buildagent en buildtaken ontvangen van Azure Pipelines.

Het registratieproces controleert op geïnstalleerde software voordat de agent wordt geregistreerd bij Azure Pipelines. 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 handmatig zelf-hostende Linux-agents kunt instellen, evenals macOS- en Windows-agents. 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. Als u een shellscript met de naam build-agent.sh wilt downloaden vanuit GitHub, voert u de volgende curl opdracht uit:

    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 bevindt zich 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 Verstek
    AZP_AGENT_VERSION De versie van de agentsoftware te installeren De versie die we voor 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 voor het uitvoeren van buildtaken _werk

    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

    Voorlopig raden we u aan de andere variabelen niet in te stellen.

  3. Stel de omgevingsvariabele AZP_AGENT_NAME in om de naam van uw agent op te geven. We raden MyLinuxAgentaan.

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

    Vervang <organisatie-> door die van u zelf. 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 agentgroep op te geven. Eerder hebt u een pool gemaakt met de naam MyAgentPool.

    export AZP_POOL=MyAgentPool
    
  7. Stel de omgevingsvariabele AZP_AGENT_VERSION 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, dus u curl de versiegegevens uit de GitHub-opslagplaats. De opdracht gebruikt jq om de meest recente versie te lezen uit de JSON-tekenreeks die wordt geretourneerd.

  8. Druk de agentversie af op de console. Controleer desgewenst om te controleren 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
    

    sudo maakt het uitvoeren van het script mogelijk als hoofdgebruiker. Het argument -E 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 draait

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, Agent-pools.

  4. Selecteer MyAgentPool.

  5. Selecteer het tabblad Agents.

    U kunt zien dat uw agent online is en klaar staat om build-opdrachten te accepteren.

    Een schermopname van Azure DevOps met de status van de privéagent. De agent wordt weergegeven als online, inactief en ingeschakeld.

    Fooi

    Als uw buildagent wordt weergegeven als Offline, wacht een paar momenten en ververs de pagina.

  6. Selecteer uw agent MyLinuxAgent.

  7. Selecteer het tabblad Mogelijkheden.

    Tijdens de installatie scande het configuratieproces uw buildagent op hulpprogrammamogelijkheden. U ziet dat npm wordt vermeld als een van deze. Denk eraan dat, zoals opgegeven in de oorspronkelijke buildconfiguratie, npm op de agent moet worden geïnstalleerd.

    Een schermopname van Azure DevOps met enkele mogelijkheden van de agent. De npm-mogelijkheid is gemarkeerd.

    Wanneer u opgeeft welke agentgroep u wilt gebruiken, kunt u een van deze vermeldingen opnemen in de sectie demands. 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.