Azure Virtual Machine Scale Set-agents

Azure DevOps Services

Azure Virtual Machine Scale Set-agents, hierna aangeduid als schaalsetagents, zijn een vorm van zelf-hostende agents die automatisch kunnen worden geschaald om aan uw eisen te voldoen. Deze elasticiteit vermindert de noodzaak om altijd toegewezen agents uit te voeren. In tegenstelling tot door Microsoft gehoste agents hebt u flexibiliteit over de grootte en de installatiekopie van machines waarop agents worden uitgevoerd.

Als u van door Microsoft gehoste agents houdt, maar beperkt bent door wat ze bieden, moet u overwegen om agents voor schaalsets te gebruiken. Hieronder volgen een aantal voorbeelden:

  • U hebt meer geheugen, meer processor, meer opslag of meer IO nodig dan wat we bieden in systeemeigen door Microsoft gehoste agents.
  • U hebt NCv2-VM nodig met specifieke instructiesets voor machine learning.
  • U moet implementeren naar een privé-Azure App Service in een privé-VNET zonder inkomende connectiviteit.
  • U moet de bedrijfsfirewall openen voor specifieke IP-adressen, zodat door Microsoft gehoste agents kunnen communiceren met uw servers.
  • U moet de netwerkverbinding van agentcomputers beperken en toestaan dat ze alleen goedgekeurde sites bereiken.
  • U kunt niet genoeg agents van Microsoft krijgen om aan uw behoeften te voldoen.
  • Uw taken overschrijden de time-out van de Microsoft-gehoste agent.
  • U kunt door Microsoft gehoste parallelle taken niet partitioneren naar afzonderlijke projecten of teams in uw organisatie.
  • U wilt verschillende opeenvolgende taken uitvoeren op een agent om te profiteren van incrementele pakketcaches op bron- en computerniveau.
  • U wilt configuratie- of cachewarmup uitvoeren voordat een agent taken accepteert.

Als u van zelf-hostende agents houdt, maar wilt dat u het beheer ervan kunt vereenvoudigen, moet u overwegen om agents voor schaalsets te gebruiken. Hieronder volgen een aantal voorbeelden:

  • U wilt niet de hele dag door speciale agenten uitvoeren. U wilt de inrichting ongedaan maken van agentmachines die niet worden gebruikt voor het uitvoeren van taken.
  • U voert niet-vertrouwde code uit in uw pijplijn en wilt na elke taak de installatiekopie van agentcomputers herstellen.
  • U wilt het regelmatig bijwerken van de basisinstallatiekopieën voor uw agents vereenvoudigen.

Notitie

  • U kunt Mac-agents niet uitvoeren met behulp van schaalsets. U kunt op deze manier alleen Windows- of Linux-agents uitvoeren.

  • Het gebruik van VMSS-agentpools voor Azure DevOps Services wordt alleen ondersteund voor de openbare azure-cloud (globale service). Momenteel bieden VMSS-agentpools geen ondersteuning voor andere nationale cloudaanbiedingen.

  • U moet een VMSS niet aan meerdere pools koppelen.

De schaalset maken

Ter voorbereiding op het maken van schaalsetagents moet u eerst een virtuele-machineschaalset maken in Azure Portal. U moet de virtuele-machineschaalset op een bepaalde manier maken, zodat Azure Pipelines deze kunnen beheren. U moet met name automatisch schalen uitschakelen, zodat Azure Pipelines kan bepalen hoe u schaalaanpassing kunt uitvoeren op basis van het aantal binnenkomende pijplijntaken. U wordt aangeraden de volgende stappen te volgen om de schaalset te maken.

In het volgende voorbeeld worden een nieuwe resourcegroep en virtuele-machineschaalset gemaakt met Azure Cloud Shell met behulp van de UbuntuLTS VM-installatiekopie.

Notitie

In dit voorbeeld wordt de vm-installatiekopie van UbuntuLTS gebruikt voor de schaalset. Als u een aangepaste VM-installatiekopieën als basis voor uw agent nodig hebt, maakt u de aangepaste installatiekopieën voordat u de schaalset maakt. Volg hiervoor de stappen in Een schaalset maken met aangepaste installatiekopieën, software of schijfgrootte.

  1. Blader naar Azure Cloud Shell op https://shell.azure.com/.

  2. Voer de volgende opdracht uit om uw standaard Azure-abonnement te verifiëren.

    az account list -o table
    

    Als uw gewenste abonnement niet als de standaardwaarde wordt vermeld, selecteert u het gewenste abonnement.

    az account set -s <your subscription ID>
    
  3. Maak een resourcegroep voor uw virtuele-machineschaalset.

    az group create \
    --location westus \
    --name vmssagents
    
  4. Maak een virtuele-machineschaalset in uw resourcegroep. In dit voorbeeld wordt de vm-installatiekopie ubuntu2204 opgegeven.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image Ubuntu2204 \
    --vm-sku Standard_D2_v4 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --generate-ssh-keys \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer "" \
    --orchestration-mode Uniform
    

    Notitie

    Azure Pipelines biedt geen ondersteuning voor het overprovisionen en automatisch schalen van schaalsets. Zorg ervoor dat beide functies zijn uitgeschakeld voor uw schaalset.

    Omdat Azure Pipelines de schaalset beheert, zijn de volgende instellingen vereist of aanbevolen:

    • --disable-overprovision -Vereist
    • --upgrade-policy-mode manual -Vereist
    • --load-balancer "" - Voor Azure Pipelines is geen load balancer vereist om taken te routeren naar de agents in de pool van de schaalsetagent, maar het configureren van een load balancer is een manier om een IP-adres op te halen voor uw schaalsetagents die u kunt gebruiken voor firewallregels. Een andere optie voor het verkrijgen van een IP-adres voor uw schaalsetagents is het maken van uw schaalset met behulp van de --public-ip-address opties. Zie de documentatie voor virtuele-machineschaalsets en az vmss create voor meer informatie over het configureren van uw schaalset met een load balancer of een openbaar IP-adres.
    • --instance-count 2 - deze instelling is niet vereist, maar biedt u de mogelijkheid om te controleren of de schaalset volledig functioneel is voordat u een agentpool maakt. Het maken van de twee VIRTUELE machines kan enkele minuten duren. Later, wanneer u de agentgroep maakt, worden deze twee VM's door Azure Pipelines verwijderd en nieuwe vm's gemaakt.

    Belangrijk

    Als u dit script uitvoert met behulp van Azure CLI in Windows, moet u de "" insluiten --load-balancer "" met enkele aanhalingstekens als volgt: --load-balancer '""'

    Als de VM-grootte tijdelijke besturingssysteemschijven ondersteunt, zijn de volgende parameters om kortstondige besturingssysteemschijven in te schakelen optioneel, maar wordt aanbevolen om de installatiekopietijden van virtuele machines te verbeteren.

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    Belangrijk

    Tijdelijke besturingssysteemschijven worden niet ondersteund op alle VM-grootten. Zie Tijdelijke besturingssysteemschijven voor Virtuele Azure-machines voor een lijst met ondersteunde VM-grootten.

    Selecteer een Linux- of Windows-installatiekopieën , hetzij vanuit Azure Marketplace of uw eigen aangepaste installatiekopieën, om de schaalset te maken. Installeer de Azure Pipelines-agent niet vooraf in de installatiekopieën. Azure Pipelines installeert de agent automatisch wanneer er nieuwe virtuele machines worden uitgevoerd. In het bovenstaande voorbeeld hebben we een gewone UbuntuLTS afbeelding gebruikt. Zie veelgestelde vragen voor instructies over het maken en gebruiken van een aangepaste installatiekopieën.

    Selecteer een VM-SKU en opslag-SKU.

    Notitie

    Licentieoverwegingen beperken ons van het distribueren van door Microsoft gehoste installatiekopieën. Deze installatiekopieën kunnen niet worden opgegeven voor gebruik in uw schaalsetagents. Maar de scripts die we gebruiken om deze installatiekopieën te genereren, zijn open source. U kunt deze scripts gebruiken en uw eigen aangepaste installatiekopieën maken.

  5. Nadat u uw schaalset hebt gemaakt, gaat u naar uw schaalset in Azure Portal en controleert u de volgende instellingen:

    • Upgradebeleid - Handmatig

      Verify upgrade policy.

      U kunt deze instelling ook controleren door de volgende Azure CLI-opdracht uit te voeren.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • Schalen - Handmatig schalen

      Verify manual scale policy.

Belangrijk

Azure Pipelines biedt geen ondersteuning voor exemplaarbeveiliging. Zorg ervoor dat de instantiebeveiligingen voor in - en schaalsetacties zijn uitgeschakeld.

Indelingsmodi

Virtuele-machineschaalsets van Azure kunnen worden geconfigureerd met twee indelingsmodi: Uniform en Flexibel. Ondersteuning voor Azure Pipelines voor de uniformindelingsmodus is algemeen beschikbaar voor alle klanten.

Met de modus Flexibele indeling kunnen Azure Pipelines meerdere schaalsetbewerkingen parallel in de wachtrij plaatsen. Ondersteuning voor Azure Pipelines voor flexibele indeling is op aanvraag beschikbaar en is onderhevig aan evaluatie. De gebruikspatronen van klanten moeten een aanzienlijk voordeel hiervan aangeven. Dergelijke klanten hebben grote schaalsets, hergebruiken agents niet voor meerdere taken, voeren meerdere kortstondige taken parallel uit en gebruiken uitsluitend tijdelijke schijven in hun VM's. Als u deze functie wilt gebruiken, neemt u contact op met ons ondersteuningsteam.

De schaalsetagentgroep maken

  1. Navigeer naar de instellingen van uw Azure DevOps-project, selecteer Agentpools onder Pijplijnen en selecteer Pool toevoegen om een nieuwe agentgroep te maken.

    Create agent pool.

    Belangrijk

    U kunt uw schaalsetgroep maken in Project-instellingen of organisatie-instellingen, maar wanneer u een schaalsetgroep verwijdert, moet u deze verwijderen uit de organisatie-instellingen en niet uit Project-instellingen.

  2. Selecteer Azure Virtual Machine Scale Set voor het pooltype. Selecteer het Azure-abonnement dat de schaalset bevat, kies Autoriseren en kies de gewenste virtuele-machineschaalset uit dat abonnement. Als u een bestaande serviceverbinding hebt, kunt u dat kiezen in de lijst in plaats van het abonnement.

    Belangrijk

    • Als u een schaalsetagentgroep wilt configureren, moet u de machtigingen Eigenaar of Gebruikerstoegang hebben Beheer istrator voor het geselecteerde abonnement. Als u een van deze machtigingen hebt, maar een foutmelding krijgt wanneer u Autoriseren kiest, raadpleegt u probleemoplossing.

    • De enige serviceverbinding die momenteel wordt ondersteund, is een Azure Resource Manager-serviceverbinding (ARM) op basis van een service-principalsleutel. ARM-serviceverbindingen op basis van een certificaatreferentie of een beheerde identiteit mislukken. Wanneer u probeert de bestaande schaalsets in uw abonnement weer te geven, ziet u een foutbericht als volgt:

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. Kies de gewenste virtuele-machineschaalset uit dat abonnement.

  4. Geef een naam op voor uw agentgroep.

  5. Configureer de volgende opties:

    • Virtuele machines automatisch verwijderen na elk gebruik : er wordt voor elke taak een nieuw VM-exemplaar gebruikt. De VIRTUELE machine gaat offline na het uitvoeren van een taak en wordt opnieuw geïnstalleerd voordat een andere taak wordt opgehaald.
    • Sla een beschadigde agent op voor onderzoek: of u vm's met een beschadigde agent wilt opslaan voor probleemoplossing in plaats van ze te verwijderen.
    • Maximum aantal virtuele machines in de schaalset : Azure Pipelines schaalt automatisch het aantal agents uit, maar overschrijdt deze limiet niet.
    • Het aantal agents dat stand-by moet blijven: Azure Pipelines wordt automatisch geschaald in het aantal agents, maar zorgt ervoor dat er altijd zoveel agents beschikbaar zijn om nieuwe taken uit te voeren. Als u het aantal agents instelt om stand-by te blijven op 0, bijvoorbeeld om kosten te besparen voor een laag aantal taken, start Azure Pipelines alleen een VIRTUELE machine wanneer deze een taak heeft.
    • Vertraging in minuten voordat overtollige inactieve agents worden verwijderd: Om rekening te houden met de variabiliteit in de buildbelasting gedurende de dag, wachten Azure Pipelines op de opgegeven duur voordat een overtollige inactieve agent wordt verwijderd.
    • Virtuele machines configureren voor het uitvoeren van interactieve tests (alleen windows Server-besturingssysteem) - Windows-agents kunnen worden geconfigureerd om niet-geëxeleveerd te worden uitgevoerd met autologon en met interactieve gebruikersinterface, of ze kunnen worden geconfigureerd voor uitvoering met verhoogde machtigingen. Schakel dit selectievakje in om niet-geëxeleveerd met interactieve gebruikersinterface uit te voeren. In beide gevallen is de agentgebruiker lid van de groep Beheer istrators.
  6. Wanneer uw instellingen zijn geconfigureerd, kiest u Maken om de agentgroep te maken.

Schaalsetagentgroep gebruiken

Het gebruik van een schaalsetagentpool is vergelijkbaar met elke andere agentgroep. U kunt deze gebruiken in klassieke build-, release- of YAML-pijplijnen. Gebruikersmachtigingen, pijplijnmachtigingen, goedkeuringen en andere controles werken op dezelfde manier als in elke andere agentgroep. Zie Agent-pools voor meer informatie.

Belangrijk

Wees voorzichtig bij het rechtstreeks aanbrengen van wijzigingen in de schaalset in Azure Portal.

  • Mogelijk wijzigt u niet veel van de configuratie-instellingen van de schaalset in Azure Portal. Azure Pipelines werkt de configuratie van de schaalset bij. Handmatige wijzigingen in de schaalset kunnen de werking van Azure Pipelines verstoren.
  • U mag de naam van een schaalset niet wijzigen of verwijderen zonder eerst de schaalsetgroep in Azure Pipelines te verwijderen.

Hoe Azure Pipelines de schaalset beheert

Zodra de schaalsetagentpool is gemaakt, worden de agentmachines automatisch geschaald door Azure Pipelines.

Azure Pipelines steekt elke 5 minuten de status van de agents in de pool en virtuele machines in de schaalset uit. De beslissing om in of uit te schalen is gebaseerd op het aantal niet-actieve agents op dat moment. Een agent wordt als niet-actief beschouwd als deze online is en geen pijplijntaak uitvoert. Azure Pipelines voert een uitschaalbewerking uit als aan een van de volgende voorwaarden wordt voldaan:

  • Het aantal niet-actieve agents valt onder het aantal stand-byagenten dat u opgeeft
  • Er zijn geen niet-actieve agents voor servicepijplijntaken die in de wachtrij wachten

Als aan een van deze voorwaarden wordt voldaan, neemt Azure Pipelines het aantal VM's toe. Uitschalen wordt uitgevoerd in stappen van een bepaald percentage van de maximale poolgrootte. Sta 20 minuten toe voordat machines voor elke stap worden gemaakt.

Azure Pipelines wordt geschaald in de agents wanneer het aantal niet-actieve agents langer dan 30 minuten overschrijdt (configureerbaar met vertraging in minuten voordat overtollige inactieve agents worden verwijderd).

Als u dit allemaal in een voorbeeld wilt plaatsen, kunt u een schaalsetagentgroep overwegen die is geconfigureerd met twee stand-byagents en vier maximaal toegestane agents. Stel dat u de VIRTUELE machine na elk gebruik wilt afbreken. Laten we er ook van uitgaan dat er geen VM's zijn om mee te beginnen in de schaalset.

  • Omdat het aantal niet-actieve agents 0 is en omdat het aantal niet-actieve agents onder het stand-byaantal van 2 ligt, wordt Azure Pipelines uitgeschaald en worden er twee VM's aan de schaalset toegevoegd. Zodra deze agents online zijn, zijn er twee niet-actieve agents.

  • Stel dat één pijplijntaak binnenkomt en wordt toegewezen aan een van de agents.

  • Op dit moment is het aantal niet-actieve agents 1 en dat is kleiner dan het aantal stand-bys van 2. Azure Pipelines schaalt dus uit en voegt 2 meer VM's toe (de incrementele grootte die in dit voorbeeld wordt gebruikt). Op dit moment heeft de pool drie niet-actieve agents en één bezet agent.

  • Stel dat de taak op de eerste agent is voltooid. Azure Pipelines haalt die agent offline om de installatiekopie van die machine te herstellen. Na een paar minuten komt deze terug met een nieuwe afbeelding. Op dit moment hebben we vier niet-actieve agents.

  • Als er 30 minuten geen andere taken binnenkomen (configureerbaar met vertraging in minuten voordat overtollige inactieve agents worden verwijderd), bepaalt Azure Pipelines dat er meer niet-actieve agents zijn dan nodig is. De pool wordt dus geschaald naar twee agents.

Tijdens deze bewerking is het doel van Azure Pipelines om het gewenste aantal niet-actieve agents in stand-by te bereiken. Pools worden langzaam in- en uitgeschaald. In de loop van een dag wordt het zwembad uitgeschaald naarmate aanvragen in de wachtrij worden geplaatst in de ochtend en inschalen als de belasting in de avond afneemt. Mogelijk ziet u meer niet-actieve agents dan u op verschillende momenten wenst. Dit wordt verwacht omdat Azure Pipelines geleidelijk convergeert naar de beperkingen die u opgeeft.

Notitie

Het kan een uur of langer duren voordat Azure Pipelines wordt uitgeschaald of geschaald in de virtuele machines. Azure Pipelines wordt in stappen uitgeschaald, bewaakt de bewerkingen op fouten en reageert door onbruikbare machines te verwijderen en door nieuwe machines in de loop van de tijd te maken. Deze corrigerende bewerking kan meer dan een uur duren.

Om maximale stabiliteit te bereiken, worden schaalsetbewerkingen opeenvolgend uitgevoerd. Als de pool bijvoorbeeld moet worden uitgeschaald en er ook beschadigde machines zijn om te verwijderen, wordt de pool eerst uitgeschaald met Azure Pipelines. Zodra de pool is uitgeschaald om het gewenste aantal niet-actieve agents op stand-by te bereiken, worden de beschadigde machines verwijderd, afhankelijk van de instelling Een beschadigde agent opslaan voor onderzoek . Zie Agents met slechte status voor meer informatie.

Vanwege de steekproefgrootte van 5 minuten is het mogelijk dat alle agents pijplijnen gedurende korte tijd kunnen uitvoeren en dat er geen uitschalen plaatsvindt.

Configuratie van pijplijnagent aanpassen

U kunt de configuratie van de Azure Pipelines Agent aanpassen door omgevingsvariabelen te definiëren in de aangepaste installatiekopieën van uw besturingssysteem voor uw schaalset. De werkmap van de schaalsetagent wordt bijvoorbeeld standaard ingesteld op C:\a voor Windows en /agent/_work voor Linux. Als u de werkmap wilt wijzigen, stelt u een omgevingsvariabele in met de naam VSTS_AGENT_INPUT_WORK met de gewenste werkmap. Meer informatie vindt u in de documentatie over configuratie zonder toezicht van de pijplijnagent. Enkele voorbeelden:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Belangrijk

Wees voorzichtig bij het aanpassen van de pijplijnagent. Sommige instellingen conflicteren met andere vereiste instellingen, waardoor de agent niet kan worden geregistreerd en de VM wordt verwijderd. Deze instellingen mogen niet worden ingesteld of gewijzigd:

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ... en alles met betrekking tot implementatiegroepen.

Het opstarten van virtuele machines aanpassen via de aangepaste scriptextensie

Gebruikers kunnen opstartscripts uitvoeren op hun schaalsetagentcomputers voordat deze machines pijplijntaken gaan uitvoeren. Enkele veelvoorkomende gebruiksvoorbeelden voor opstartscripts zijn het installeren van software, het opwarmen van caches of het ophalen van opslagplaatsen. U kunt opstartscripts uitvoeren door de aangepaste scriptextensie voor Windows of aangepaste scriptextensie voor Linux te installeren.

Deze extensie wordt uitgevoerd op elke virtuele machine in de schaalset direct nadat deze is gemaakt of opnieuw is gemaakt. De aangepaste scriptextensie wordt uitgevoerd voordat de Azure Pipelines-agentextensie wordt uitgevoerd.

Hier volgt een voorbeeld van het maken van een aangepaste scriptextensie voor Linux.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Hier volgt een voorbeeld van het maken van een aangepaste scriptextensie voor Windows.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

Belangrijk

De scripts die worden uitgevoerd in de aangepaste scriptextensie, moeten worden geretourneerd met afsluitcode 0 om het maken van de VIRTUELE machine te voltooien. Als de aangepaste scriptextensie een uitzondering genereert of een afsluitcode retourneert die niet nul is, wordt de Azure Pipeline-extensie niet uitgevoerd en wordt de VIRTUELE machine niet geregistreerd bij de Azure DevOps-agentgroep.

Het kan gebeuren dat uw extensie wordt uitgevoerd voordat alle VM-resources worden ingericht. In dat geval ziet u een foutmelding die vergelijkbaar is met 'mislukte installatie van basisvereisten'. U kunt dit oplossen door bijvoorbeeld een sleep opdracht toe te voegen aan het begin van uw script sleep 30.

Levenscyclus van een schaalsetagent

Hier volgt de stroom bewerkingen voor een virtuele-machineschaalsetagent van Azure Pipelines

  1. De grootte van de schaalsetagenttaak van De Azure DevOps-schaalset bepaalt dat de pool te weinig inactieve agents heeft en moet worden uitgeschaald. Azure Pipelines roept Azure Scale Sets aan om de capaciteit van de schaalset te vergroten.

  2. De Azure-schaalset begint met het maken van de nieuwe virtuele machines. Zodra de virtuele machines worden uitgevoerd, worden in Azure Scale Sets eventuele geïnstalleerde VM-extensies opeenvolgend uitgevoerd.

  3. Als de aangepaste scriptextensie is geïnstalleerd, wordt deze uitgevoerd vóór de Azure Pipelines Agent-extensie. Als de aangepaste scriptextensie een niet-nul afsluitcode retourneert, wordt het proces voor het maken van de VIRTUELE machine afgebroken en wordt deze verwijderd.

  4. De Azure Pipelines Agent-extensie wordt uitgevoerd. Met deze extensie wordt de nieuwste versie van de Azure Pipelines-agent gedownload, samen met de nieuwste versie van het configuratiescript. De configuratiescripts vindt u op URL's met de volgende indelingen:

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.shbijvoorbeeld versie 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1bijvoorbeeld versie 17
  5. Het configuratiescript maakt een lokale gebruiker met de naam AzDevOps of het besturingssysteem Windows Server of Linux is. Voor windows 10-clientbesturingssystemen wordt de agent uitgevoerd als LocalSystem. Het script pakt vervolgens uit, installeert en configureert de Azure Pipelines-agent. Als onderdeel van de configuratie registreert de agent zich bij de Azure DevOps-agentgroep en wordt deze weergegeven in de lijst met agentgroepen in de status Offline.

  6. Voor de meeste scenario's start het configuratiescript de agent vervolgens onmiddellijk om te worden uitgevoerd als de lokale gebruiker AzDevOps. De agent gaat online en is klaar om pijplijntaken uit te voeren.

    Als de pool is geconfigureerd voor de interactieve gebruikersinterface, wordt de virtuele machine opnieuw opgestart nadat de agent is geconfigureerd. Na het opnieuw opstarten meldt de lokale gebruiker zich automatisch aan en wordt de agent voor pijplijnen gestart. De agent gaat vervolgens online en is klaar om pijplijntaken uit te voeren.

Een schaalset maken met aangepaste installatiekopieën, software of schijfgrootte

Als u alleen een schaalset wilt maken met de standaardbesturingssysteemschijf van 128 GB met behulp van een openbaar beschikbare Azure-installatiekopie, gaat u rechtstreeks naar stap 10 en gebruikt u de naam van de openbare installatiekopie (UbuntuLTS, Win2019DataCenter, enzovoort) om de schaalset te maken. Volg anders deze stappen om uw VM-installatiekopieën aan te passen.

  1. Maak een VIRTUELE machine met de gewenste installatiekopieën van het besturingssysteem en vouw desgewenst de grootte van de besturingssysteemschijf uit van 128 GB naar <myDiskSizeGb>.

    • Als u begint met een beschikbare Azure-installatiekopie, bijvoorbeeld <myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • Als u begint met een gegeneraliseerde VHD:

      1. Maak eerst de VIRTUELE machine met een niet-beheerde schijf van de gewenste grootte en converteer vervolgens naar een beheerde schijf:

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. De VIRTUELE machine afsluiten

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. De toewijzing van de VIRTUELE machine ongedaan maken

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. Converteren naar een beheerde schijf

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. Start de VM opnieuw op

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. Extern bureaublad (of SSH) naar het openbare IP-adres van de virtuele machine om de installatiekopie aan te passen. Mogelijk moet u poorten in de firewall openen om de RDP-poorten (3389) of SSH-poorten (22) te deblokkeren.

    1. Windows : als <MyDiskSizeGb> deze groter is dan 128 GB, kunt u de schijfgrootte van het besturingssysteem uitbreiden om de schijfgrootte te vullen die u hebt opgegeven door <MyDiskSizeGb>.

      Open het hulpprogramma DiskPart als beheerder en voer deze DiskPart-opdrachten uit:

      1. list volume (om de volumes weer te geven)
      2. select volume 2 (hangt af van welk volume het besturingssysteemstation is)
      3. extend size 72000 (om het station uit te breiden met 72 GB, van 128 GB tot 200 GB)
  3. Installeer eventuele gewenste extra software op de VIRTUELE machine.

  4. Als u de machtigingen van de pijplijnagentgebruiker wilt aanpassen, kunt u een gebruiker met de naam AzDevOpsmaken en die gebruiker de machtigingen verlenen die u nodig hebt. Deze gebruiker wordt gemaakt door het opstartscript van de scaleset-agent als deze nog niet bestaat.

  5. De VIRTUELE machine opnieuw opstarten wanneer u klaar bent met aanpassingen

  6. Generaliseer de VIRTUELE machine.

    • Windows - Vanuit een beheerconsolevenster:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Belangrijk

    Wacht totdat de VM de generalisatie en het afsluiten heeft voltooid. Ga pas verder als de VIRTUELE machine is gestopt. 60 minuten toestaan.

  7. De toewijzing van de VIRTUELE machine ongedaan maken

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. De VIRTUELE machine markeren als Gegeneraliseerd

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. Maak een VM-installatiekopieën op basis van de gegeneraliseerde installatiekopieën. Wanneer u deze stappen uitvoert om een bestaande schaalsetinstallatiekopieën bij te werken, noteert u de URL van de installatiekopieën in de uitvoer.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. De schaalset maken op basis van de aangepaste VM-installatiekopieën

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. Controleer of beide VM's die zijn gemaakt in de schaalset online zijn, verschillende namen hebben en de status Geslaagd bereiken

U bent nu klaar om een agentpool te maken met behulp van deze schaalset.

Een bestaande schaalset bijwerken met een nieuwe aangepaste installatiekopieën

Als u de installatiekopieën in een bestaande schaalset wilt bijwerken, volgt u de stappen in de vorige sectie Een schaalset maken met aangepaste installatiekopieën, software of schijfgrootte in de az image create stap om de aangepaste installatiekopieën van het besturingssysteem te genereren. Noteer de URL van de id-eigenschap die wordt uitgevoerd vanuit de az image create opdracht. Werk vervolgens de schaalset bij met de nieuwe afbeelding, zoals wordt weergegeven in het volgende voorbeeld. Nadat de installatiekopieën van de schaalset zijn bijgewerkt, worden alle toekomstige VM's in de schaalset gemaakt met de nieuwe installatiekopieën.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

Ondersteunde besturingssystemen

Schaalsetagents ondersteunen momenteel Ubuntu Linux, Windows Server/DataCenter 2016/2019 en Windows 10-client.

Bekende problemen

  • Debian- of RedHat Linux-distributies worden niet ondersteund. Alleen Ubuntu is.
  • Windows 10-client biedt geen ondersteuning voor het uitvoeren van de pijplijnagent als lokale gebruiker en daarom kan de agent niet communiceren met de gebruikersinterface. De agent wordt in plaats daarvan uitgevoerd als lokale service.

Problemen oplossen

Navigeer naar de instellingen van uw Azure DevOps-project, selecteer Agentpools onder Pijplijnen en selecteer uw agentpool. Selecteer het tabblad Diagnostische gegevens.

Op het tabblad Diagnostisch worden alle acties weergegeven die door Azure DevOps worden uitgevoerd om VM's in uw Azure-schaalset te maken, te verwijderen of te herstellen. Diagnostische gegevens registreren ook eventuele fouten die zijn opgetreden tijdens het uitvoeren van deze acties. Bekijk de fouten om ervoor te zorgen dat uw schaalset voldoende resources heeft om uit te schalen. Als uw Azure-abonnement de resourcelimiet heeft bereikt in VM's, CPU-kernen, schijven of IP-adressen, worden deze fouten hier weergegeven.

Beschadigde agents

Wanneer agents of virtuele machines niet kunnen worden gestart, geen verbinding maakt met Azure DevOps of onverwacht offline gaat, registreert Azure DevOps de fouten op het tabblad Diagnostische gegevens van de agentgroep en probeert de gekoppelde virtuele machine te verwijderen. Netwerkconfiguratie, aanpassing van installatiekopieën en opnieuw opstarten in behandeling kunnen deze problemen veroorzaken. Verbinding maken naar de VM om fouten op te sporen en logboeken te verzamelen, kan dit helpen bij het onderzoek.

Als u wilt dat Azure DevOps een beschadigde agent-VM opslaat voor onderzoek en deze niet automatisch verwijdert wanneer de status Niet in orde is, gaat u naar de instellingen van uw Azure DevOps-project, selecteert u Agentpools onder Pijplijnen en selecteert u uw agentgroep. Kies Instellingen, selecteer de optie Een beschadigde agent opslaan voor onderzoek en kies Opslaan.

Save unhealthy agent setting.

Wanneer er nu een beschadigde agent wordt gedetecteerd in de schaalset, slaat Azure DevOps die agent en de bijbehorende virtuele machine op. De opgeslagen agent wordt weergegeven op het tabblad Diagnostische gegevens van de gebruikersinterface van de agentgroep. Navigeer naar de instellingen van uw Azure DevOps-project, selecteer Agentpools onder Pijplijnen, selecteer uw agentgroep, kies Diagnostische gegevens en noteer de naam van de agent.

Saved agents card.

Zoek de gekoppelde virtuele machine in uw Virtuele-machineschaalset van Azure via Azure Portal in de lijst met instanties .

Azure portal Virtual Machine Scale Set instances.

Selecteer het exemplaar, kies Verbinding maken en voer uw onderzoek uit.

Connect to virtual machine instance.

Als u de opgeslagen agent wilt verwijderen wanneer u klaar bent met uw onderzoek, gaat u naar de instellingen van uw Azure DevOps-project, selecteert u Agentpools onder Pijplijnen en selecteert u uw agentpool. Kies het tabblad Diagnostische gegevens. Zoek de agent op de agents die zijn opgeslagen voor de onderzoekskaart en kies Verwijderen. Hiermee verwijdert u de agent uit de pool en verwijdert u de bijbehorende virtuele machine.

Saved agents card delete button.

Veelgestelde vragen

Waar vind ik de installatiekopieën die worden gebruikt voor door Microsoft gehoste agents?

Licentieoverwegingen beperken ons van het distribueren van door Microsoft gehoste installatiekopieën. Deze installatiekopieën kunnen niet worden opgegeven voor gebruik in uw schaalsetagents. Maar de scripts die we gebruiken om deze installatiekopieën te genereren, zijn open source. U kunt deze scripts gratis gebruiken en uw eigen aangepaste installatiekopieën maken.

Hoe kan ik schaalsetagents configureren om UI-tests uit te voeren?

Maak een schaalset met een Windows Server-besturingssysteem en selecteer bij het maken van de agentgroep de optie Virtuele machines configureren om interactieve tests uit te voeren.

Hoe kan ik agents verwijderen?

' Navigeer naar de instellingen van uw Azure DevOps-project, selecteer Agentpools onder Pijplijnen en selecteer uw agentgroep. Selecteer het tabblad Agents met het label. Klik op de wisselknop Ingeschakeld om de agent uit te schakelen. De uitgeschakelde agent voltooit de pijplijn die momenteel wordt uitgevoerd en haalt geen extra werk op. Binnen enkele minuten nadat de huidige pijplijntaak is voltooid, wordt de agent verwijderd.

Kan ik de pool van de schaalsetagent zo configureren dat er geen agents stand-by zijn?

Ja, als u het aantal agents instelt om stand-by te houden op nul, bijvoorbeeld om kosten te besparen voor een laag aantal taken, start Azure Pipelines een VIRTUELE machine alleen wanneer deze een taak heeft.

Hoeveel kosten schaalsetagents?

Prijzen voor schaalsetagents zijn vergelijkbaar met andere zelf-hostende agents. U geeft de infrastructuur op waarop de agentsoftware en de taken moeten worden uitgevoerd en u betaalt voor het gewenste aantal taken dat gelijktijdig kan worden uitgevoerd door parallelle taken aan te schaffen.

Voor schaalsetagents is de infrastructuur voor het uitvoeren van de agentsoftware en -taken Azure Virtual Machine Scale Sets en worden de prijzen beschreven in prijzen voor virtuele-machineschaalsets.

Zie Parallelle taken configureren en betalen voor informatie over het aanschaffen van parallelle taken.

Wat zijn enkele veelvoorkomende problemen en hun oplossingen?

U ziet meer niet-actieve agents dan gewenst op verschillende tijdstippen

Zie Hoe Azure Pipelines de schaalset beheert voor meer inzicht in de reden waarom dit gebeurt. Tijdens de schaalbewerking is het doel voor Azure Pipelines het gewenste aantal niet-actieve agents op stand-by te bereiken. Pools worden langzaam in- en uitgeschaald. Tijdens de dag wordt de pool uitgeschaald naarmate aanvragen 's ochtends in de wachtrij worden geplaatst en 's avonds ingeschaald als de belasting afneemt. Dit is een verwacht gedrag omdat Azure Pipelines geleidelijk convergeert naar de beperkingen die u opgeeft.

OMHOOG schalen van VMSS gebeurt niet in het verwachte interval van vijf minuten

De schaaltaak wordt elke vijf minuten uitgevoerd, maar als er slechts één bewerking wordt verwerkt, ziet u mogelijk dat omhoog schalen niet binnen vijf minuten plaatsvindt. Dit gebeurt momenteel opzettelijk.

Azure DevOps Linux VM-schaalset kan de pijplijn vaak niet starten

De eerste plaats om te kijken wanneer u problemen ondervindt met schaalsetagents, is het tabblad Diagnostische gegevens in de agentpool.

Overweeg ook de beschadigde VM op te slaan voor foutopsporingsdoeleinden. Zie Beschadigde agents voor meer informatie.

Opgeslagen agents zijn er, tenzij u ze verwijdert. Als de agent binnen tien minuten niet online komt, wordt deze gemarkeerd als beschadigd en indien mogelijk opgeslagen. Er wordt slechts één VIRTUELE machine in een opgeslagen status bewaard. Als de agent onverwacht offline gaat (vanwege het opnieuw opstarten van een virtuele machine of iets met de installatiekopie), wordt deze niet opgeslagen voor onderzoek.

Alleen VM's waarvoor agents niet kunnen worden gestart, worden opgeslagen. Als een VM tijdens het maken een mislukte status heeft, wordt deze niet opgeslagen. In dit geval is het bericht op het tabblad Diagnostische gegevens 'beschadigde machine verwijderen' in plaats van 'kan niet worden gestart'.

U controleert de optie om virtuele machines automatisch te verwijderen na elk gebruik voor de agentgroep, maar u ziet dat de VM's niet opnieuw worden gemaakt zoals ze zouden moeten en gewoon nieuwe taken ophalen terwijl ze in de wachtrij staan

De optie om de VM na elke build te verwijderen, werkt alleen voor Windows Server en ondersteunde Linux-installatiekopieën. Het wordt niet ondersteund voor Windows-clientinstallatiekopieën.

VMSS toont de agent als offline als de VIRTUELE machine opnieuw wordt opgestart

De agents weergeven als offline als de VM opnieuw wordt opgestart, is het verwachte gedrag. De agentservice wordt alleen uitgevoerd in de systeemcontext. Als de machine echter om de een of andere reden opnieuw wordt opgestart, wordt deze beschouwd als een beschadigde VM en verwijderd. Zie Beschadigde agents voor meer informatie.

Wanneer agents of virtuele machines niet kunnen worden gestart, geen verbinding kan maken met Azure DevOps of onverwacht offline kan gaan, registreert Azure DevOps de fouten op het tabblad Diagnostische gegevens van de agentgroep en probeert de gekoppelde virtuele machine te verwijderen. Netwerkconfiguratie, aanpassing van installatiekopieën en opnieuw opstarten in behandeling kunnen deze problemen veroorzaken. Schakel de software-update op de installatiekopie uit om het probleem te voorkomen. U kunt ook verbinding maken met de VM om fouten op te sporen en logboeken te verzamelen om het probleem te onderzoeken.

U kunt meerdere tags zien, zoals _AzureDevOpsElasticPoolTimeStamp voor VMSS in Cost Management

Wanneer de pool wordt gemaakt, wordt een tag toegevoegd aan de schaalset om de schaalset te markeren als in gebruik (om te voorkomen dat twee pools dezelfde schaalset gebruiken) en wordt een andere tag toegevoegd voor de tijdstempel die wordt bijgewerkt telkens wanneer de configuratietaak wordt uitgevoerd (elke twee uur).

U kunt geen nieuwe schaalsetagentgroep maken en een foutbericht krijgen dat er al een pool met dezelfde naam bestaat

Mogelijk krijgt u een foutbericht, bijvoorbeeld This virtual machine scale set is already in use by pool <pool name> omdat de tag nog steeds bestaat in de schaalset, zelfs nadat deze is verwijderd. Wanneer een agentgroep wordt verwijderd, probeert u de tag uit de schaalset te verwijderen, maar dit is een best-effortpoging en u geeft het op na drie nieuwe pogingen. Er kan ook maximaal twee uur tussenruimte zijn, waarbij een virtuele-machineschaalset die niet wordt gebruikt door een agentgroep, niet kan worden toegewezen aan een nieuwe. De oplossing hiervoor is te wachten tot de tijdsinterval is verstreken of de tag voor de schaalset handmatig te verwijderen uit de Azure Portal. Wanneer u de schaalset in de Azure Portal bekijkt, selecteert u de koppeling Tags aan de linkerkant en verwijdert u de tag met het label _AzureDevOpsElasticPool.

VMSS-onderhoudstaak wordt niet uitgevoerd op agents of het ophalen van logboeken

De onderhoudstaak wordt eenmaal elke 24 uur uitgevoerd. Het is mogelijk dat VM's voor deze tijd worden gevuld. Overweeg de schijfgrootte op de VM te vergroten en een script toe te voegen in de pijplijn om de inhoud te verwijderen.

Als u opgeeft AzDevOps als de primaire beheerder in uw script voor VMSS, ziet u mogelijk problemen met de agentconfiguraties op schaalsetexemplaren

Als u opgeeft AzDevOps als de primaire beheerder in uw script voor virtuele-machineschaalset, kunt u problemen ondervinden met de agentconfiguraties op schaalsetexemplaren (het wachtwoord voor de gebruiker wordt gewijzigd als deze al bestaat).

Dit probleem treedt op omdat agentextensiescripts proberen de gebruiker AzDevOps te maken en het wachtwoord te wijzigen.

Notitie

Het is in orde om de gebruiker te maken en deze extra machtigingen te verlenen, maar dit mag niet de primaire beheerder zijn en er mag niets afhankelijk zijn van het wachtwoord, omdat het wachtwoord wordt gewijzigd. Als u het probleem wilt voorkomen, kiest u een andere gebruiker als primaire beheerder bij het maken van de schaalset in plaats van AzDevOps.

Installatie van agentextensie mislukt op schaalsetexemplaren vanwege netwerkbeveiligings- en firewallconfiguraties

De extensie moet de buildagentbestanden kunnen downloaden van https://vstsagentpackage.azureedge.net/agent en de build agent moet zich kunnen registreren bij Azure DevOps Services. Zorg ervoor dat deze URL en aan Azure DevOps Services gerelateerde IP-adressen en URL's zijn geopend op het exemplaar. Zie Toegestane IP-adressen en domein-URL's voor IP-adressen en URL's die moeten worden gedeblokkeerd in uw firewall.

Waarom roept mijn configuratiescript voor de schaalsetagent Add-MpPreference aan en configureert Windows Defender op de agent?

Om de prestaties en betrouwbaarheid te verbeteren, roepen de configuratiescripts Add-MpPreference aan met een ExclusionPath bevat C:\ en D:\, waardoor Windows Defender geplande en realtime scannen op bestanden in deze mappen op de agent wordt uitgeschakeld. Als u het standaardgedrag wilt wijzigen, stelt u een omgevingsvariabele in met de naam ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSIONtrue.

Ik wil mijn zwembad groter maken. Waar moet ik rekening mee houden?

Voordat u de grootte van uw pool vergroot, moet u ervoor zorgen dat het virtuele Azure-netwerk dat is geconfigureerd voor uw pool voor virtuele-machineschaalsets een groot genoeg adresruimtebereik heeft om al uw nieuwe agents te kunnen gebruiken. Als dat niet het probleem is, krijgt u mogelijk een foutmelding die vergelijkbaar is met Mislukt om de capaciteit te verhogen. Subnet azure-devops-agent-pool-fabrikam-fiber met adresvoorvoegsel 12.123.45.224/28 heeft onvoldoende capaciteit voor 5 IP-adressen.