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 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.
Ga naar de Azure Portal en meld u aan.
Selecteer in het menu Cloud Shell. 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 die dicht bij u in de buurt is. Kies bijvoorbeeldeastasia
ofwestus2
.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.
Ga in Azure DevOps naar het Space Game - web - Agent project.
Selecteer Project-instellingen.
Selecteer onder Pipelinesde Agent-pools.
Selecteer Groep toevoegen.
In het venster Pool toevoegen:
- Selecteer onder Groep omte koppelen Nieuwe.
- Selecteer onder pooltypede zelfgehoste.
- Voer onder NaamMyAgentPoolin.
In de praktijk kiest u een meer beschrijvende naam voor uw pool.
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.
Open uw profielinstellingen in Azure DevOps en selecteer vervolgens persoonlijke toegangstokens.
Selecteer nieuw token.
Voer een naam in voor uw token, zoals Build-agent.
Selecteer onder Bereikende Alle bereiken weergeven link onderaan.
Zoek agentgroepenen selecteer &beheren.
Selecteer Maakaan.
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.
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
.Druk het IP-adres van de VIRTUELE machine af op de console:
echo $IPADDRESS
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 uaz 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.
Werk in uw SSH-verbinding de apt package manager-cache bij:
sudo apt-get update
sudo
voert de opdracht uit met administrator- of rootbevoegdheden.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 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.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.
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
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.
Stel de omgevingsvariabele
AZP_AGENT_NAME
in om de naam van uw agent op te geven. We raden MyLinuxAgentaan.export AZP_AGENT_NAME=MyLinuxAgent
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
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 agentgroep op te geven. Eerder hebt u een pool gemaakt met de naam MyAgentPool.export AZP_POOL=MyAgentPool
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 gebruiktjq
om de meest recente versie te lezen uit de JSON-tekenreeks die wordt geretourneerd.Druk de agentversie af op de console. Controleer desgewenst om te controleren 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
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.
Ga in Azure DevOps naar het Space Game - web - Agent project.
Selecteer Project-instellingen.
Selecteer onder Pipelines, Agent-pools.
Selecteer MyAgentPool.
Selecteer het tabblad Agents.
U kunt zien dat uw agent online is en klaar staat om build-opdrachten te accepteren.
Fooi
Als uw buildagent wordt weergegeven als Offline, wacht een paar momenten en ververs de pagina.
Selecteer uw agent MyLinuxAgent.
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.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.