Eerder dit jaar deelde Martijn al een aantal handige Azure DevOps tips en tricks, met de belofte van een driedelige serie. Inmiddels is hij aan de slag gegaan bij Yivi, een van onze zusterbedrijven. Toch maakt hij zijn belofte waar, en dus bij deze: deel twee in de serie Azure DevOps tips & tricks!
Vorig jaar augustus heeft Microsoft een wens van veel Azure DevOps engineers laten uitkomen met de Public Preview release van Managed DevOps pools. Deze feature maakt het opzetten en beheren van DevOps infrastructuur (Azure Pipeline agents) een stuk eenvoudiger, waardoor we als developers meer tijd hebben voor het creëren van applicaties en diensten en daarmee waarde kunnen leveren aan onze klanten. Inmiddels is de dienst General Available en beschikbaar voor alle organisaties die ermee aan de slag willen.
Wat was de situatie vóór Managed DevOps Pools?
Om te begrijpen wat de dienst voor je kan betekenen, doen we eerst een stapje terug, om te begrijpen welke voordelen en nadelen er aan de alternatieven zitten. Vóór de release van Managed DevOps pools (MDP), bood Azure DevOps namelijk al drie mogelijkheden om pipeline agents binnen een organisatie te gebruiken:
- Microsoft-hosted agents (ook bekend als Azure Pipelines agents)
- Self-hosted agents
- Azure Virtual Machine Scale Set agents (VMSS)
Microsoft-hosted agents is een volledig managed manier is om agents aan projectteams aan te bieden. Deze agents zijn echter wel beperkt in hun mogelijkheden, bijvoorbeeld op het gebied van CPU/memory, beschikbare images of de mogelijkheid om in een private network te worden opgenomen. Om over deze beperkingen heen te komen, is het mogelijk om zelf VMs op te zetten (self-hosted agents), maar dit betekent wel dat je zelf alle infrastructuur en onderhoud moet organiseren en er geen eenvoudige manier is om de oplossing schaalbaar te maken.
Een eerste poging van Microsoft om deze overhead weg te nemen, was de introductie van VMSS als agent-pool, waarmee teams een schaalbare pool kunnen bouwen op basis van VM Scale Sets in Azure, met alle flexibiliteit aan keuze voor SKU, image, netwerk etc. Hiermee is het opzetten van schaalbare agent-pools aanzienlijk eenvoudiger, maar ben je zelf nog altijd verantwoordelijk voor het beheer van de VMs in je eigen Azure subscription.
Wat is Managed DevOps Pools (MDP)?
Met Managed DevOps Pools biedt Microsoft een zogenoemd ‘hosted on behalf’-model aan. Hierbij neemt Microsoft het management van de VMSS/VMs voor hun rekening in hun eigen interne subscription, en worden de machines ontsloten via de MDP-service aan jouw Azure DevOps omgeving. Hiermee combineert MDP de flexibiliteit van VMSS agents en de eenvoud van Azure Pipeline agents.
Extra voordelen van MDP
Naast deze fijne combinatie, biedt MDP nog een aantal extra voordelen:
- Microsoft-hosted Quick-start images; de images die gebruikt worden door de Azure Pipeline agents, zijn door Microsoft beschikbaar gemaakt bij het opzetten van MDP.
- Standby agents; configureer hoeveel agent standby moeten zijn, zodat pipelines altijd snel worden verwerkt.
- SKU selectie; bij het configureren van een MDP, kan je elke (voor jou) beschikbare Azure SKU kiezen, waarmee je de agents kan afstemmen op de pipelines die daarop draaien.
Onderstaand diagram geeft een overzicht van de verschillende opties die je hebt om agents binnen Azure DevOps te gebruiken en welke unieke en overlappende eigenschappen en/of voordelen de verschillende opties hebben.

Aan de slag: MDP aanmaken in Azure
Nu we weten wat Managed DevOps pool is en welke voordelen de service biedt, laten we eens kijken hoe het er in de praktijk uitziet.
Stap 1: Dev Center en resource providers
Om een MDP op te zetten, dien je een Dev Center met een Dev Center Project aan te maken in Azure. Dev Center is een Azure service die diensten aanbiedt op het gebied van collaboration, zoals Dev Box. In deze blog ga ik verder niet in op het concept van Dev Center of Dev Box.
Om een MDP aan te kunnen maken, moet je eerst de resource-providers Microsoft.DevCenter en Microsoft.DevOpsInfrastructure voor jou Azure Subscription registreren. Hiervoor ga je in Azure naar Subscriptions en selecteer je de subscription waar je de Dev Center in wil aanmaken. In het menu, kies je vervolgens onder Settings voor Resource Providers. Zoek hier op ‘Microsoft.Dev’ om de providers te vinden. Selecteer één voor één de providers en klik op ‘Register’. Binnen enkele ogenblikken zou de status op ‘registered’ moeten komen te staan.

Stap 2: Pool toevoegen in Azure DevOps
We zijn nu klaar om een Managed DevOps Pool aan te maken. In Azure DevOps, ga je naar de settings van je Organization of een Project en klik op Agent pools. Klik op Add pool om een pool toe te voegen. In de popup, is een nieuwe pool-type beschikbaar: Managed DevOps pool. Selecteer deze en klik vervolgens op Create in Azure.


Je wordt nu doorverwezen naar de Azure Portal. Klik hier op ‘Create Managed DevOps Pool’. Selecteer hier welke subscription je wilt gebruiken (degene waarvoor de resource-providers zijn geregistreerd) en de resourcegroup waarin de MDP wordt gedeployed.
Stap 3: Dev Center en project aanmaken
Hierna zet je eerst de Dev Center en het Dev Center Project op. Dit is eenvoudig aan te maken door op de link ‘Create new Dev Center and project´ link te klikken, welke je vindt onder het Dev Center project inputveld. Hier hoef je alleen een geldige en beschikbare naam voor een Dev Center en project op te geven, waarna deze met alle default settings wordt aangemaakt. Als je meer controle wil over de settings, maak je eerst een Dev Center aan, voordat je met de MDP service aan de slag gaat (of pas deze achteraf aan aan je eigen eisen/wensen).

Stap 4: Details en configuratie van de pool
Hierna vul je de details van je Azure DevOps organization en de Pool name zoals je wilt dat de pool in Azure DevOps in Agent Pools gaat heten. Selecteer ook de Region waar de resources moeten worden aangemaakt.
Hierna selecteer je tot hoeveel agents er maximaal opgeschaald mag worden. Dit aantal is mede afhankelijk van het aantal Parallel jobs dat beschikbaar is in Azure DevOps. Als je bijvoorbeeld 5 beschikbare self-hosted Parallel jobs hebt, schedulet Azure DevOps niet meer dan 5 taken gelijktijdig, en heeft het dus geen nut om meer dan 5 agents in MDP beschikbaar te hebben. Wanneer je ook andere agent pools gebruikt, zal je een beetje moeten gaan rekenen hoeveel agents en/of parallel jobs je nodig hebt.
Vervolgens selecteer je de Agent size en OS disk type die het meest geschikt zijn voor de taken die op de agents gaan draaien. In principe kan je elke VM size kiezen die Azure te bieden heeft. Voor sommige specifieke VM sizes (bijv. voor GPU of FPGA accelerated machines) dien je eerst een quota aanvraag te doen, voordat deze beschikbaar zal zijn voor MDP.

Stap 5: Image selecteren
Als laatste kies je welke image(s) de agent pool gaat ondersteunen. Je kiest hier voor 1 of meerdere Azure Pipeline Images (images die door de Microsoft-hosted agents worden gebruikt), Marketplace images of images uit je eigen Compute Gallery. Wanneer je meerdere images beschikbaar maakt via MDP, dien je in je pipeline de alias te selecteren die je hier configureert. De Azure Pipelines Images hebben een standaard alias beschikbaar. Voor andere images zal je deze zelf moeten instellen via het context menu achter de toegevoegde image.

Wanneer alles is ingevuld, kan je de MDP resource aanmaken door op Review + create te klikken, of je kan nog extra settings met betrekking tot networking, scaling, storage en security configureren. Voor nu slaan we dat over en maken we een basis MDP resource aan met de huidige settings.
Stap 6: Gebruik in je pipeline
Wanneer de resource is aangemaakt, ga je terug naar je Azure DevOps omgeving. Als je weer naar de settings van de Agent Pool gaat, zie dat de nieuwe MDP pool ertussen staat met de naam die je Azure had geconfigureerd. Klik je op de pool, dan kan je deze qua security en checks/approvals net zo inrichten als elke andere agent pool.


Het enige dat nog rest, is om de agent pool te gebruiken in een pipeline. In je pipeline geef je de pool naam aan zoals deze in Azure DevOps bekend is. Wanneer je bij het opzetten van de MDP in Azure meerdere images beschikbaar hebt gemaakt, moet je ook de image opgeven zoals je op de afbeelding ziet.
Wanneer je voor het eerst de pool gebruikt (of het is lang geleden dat de pool is gebruikt) en je hebt Standby agent mode niet aangezet, zal de eerste run van een pipeline langer duren, omdat alle agents zijn gedownscaled en er een nieuwe agent moet worden geprovisioned. Je ziet gedurende de provisioning van de agent dan onderstaande melding. Hetzelfde gebeurt wanneer de Agent state is geconfigureerd op Fresh agent every time. Er wordt dan elke run van een pipeline een nieuwe VM gestart, wat erg traag werkt. Deze instellingen kan je in de MDP in Azure wijzigen onder Settings > Scaling. Uiteindelijk zal de job starten en worden afgehandeld zoals elke andere pipeline.

Round-up
Hopelijk heb ik je met deze blog kunnen inspireren om te kijken of Managed DevOps Pools iets voor jou organisatie kunnen betekenen. In de volgende blog van deze driedelige serie ga ik het hebben over een andere nieuwe, grote feature van Azure DevOps: GitHub Advanced Security.
Heb je vragen over Managed DevOps Pools, of wil je eens met ons sparren hoe wij jouw Azure oplossingen slimmer kunnen maken? Neem dan vooral contact met ons op!