Oefening: een buildagent maken die wordt uitgevoerd in Azure
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.
Ga naar Azure Portal en meld u aan.
Selecteer Cloud Shell in het menu. Wanneer u hierom wordt gevraagd, selecteert u de Bash-ervaring .
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.
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
Selecteer in de
Name
kolom in de uitvoer een regio dicht bij u in de buurt. Kieseastasia
westus2
of kies bijvoorbeeld .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.
Ga in Azure DevOps naar het Space Game - web - Agent-project .
Selecteer Project-instellingen.
Selecteer onder Pipelines de optie Agentpools.
Selecteer Groep toevoegen.
In het venster Pool toevoegen:
- Selecteer Nieuw onder Groep die u wilt koppelen.
- Selecteer onder Pooltype de optie Zelf-hostend.
- Voer onder Naam MyAgentPool in.
In de praktijk kiest u een meer beschrijvende naam voor uw pool.
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.
Open uw profielinstellingen in Azure DevOps en selecteer vervolgens Persoonlijke toegangstokens.
Selecteer Nieuw token.
Voer een naam in voor uw token, zoals Buildagent.
Selecteer onder Bereiken de koppeling Alle bereiken weergeven onderaan.
Zoek naar agentpools en selecteer vervolgens Lezen en beheren.
Selecteer Maken.
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.
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
.Druk het IP-adres van de VIRTUELE machine af op de console:
echo $IPADDRESS
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 uaz 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.
Werk in uw SSH-verbinding de apt package manager-cache bij:
sudo apt-get update
sudo
voert de opdracht uit met administrator- of hoofdbevoegdheden.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
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.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.
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
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.
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
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
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
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
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 gebruiktjq
om de nieuwste versie te lezen uit de JSON-tekenreeks die wordt geretourneerd.Druk de agentversie af naar de console. Controleer desgewenst of dit de nieuwste versie is.
echo $AZP_AGENT_VERSION
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.
Ga in Azure DevOps naar het Space Game - web - Agent-project .
Selecteer Project-instellingen.
Selecteer onder Pipelines de optie Agentpools.
Selecteer MyAgentPool.
Selecteer het tabblad Agents.
U kunt zien dat uw agent online is en klaar is om buildtaken te accepteren.
Tip
Als de buildagent offline wordt weergegeven, wacht u even en vernieuwt u de pagina.
Selecteer uw agent, MyLinuxAgent.
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 datnpm
op de agent moet worden geïnstalleerd.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.