DevOpsZes tips om te starten met YAML pipelines

Steeds meer organisaties maken gebruik van YAML pipelines of willen nu de overstap maken naar YAML pipelines. In een eerdere blog hebben we al eens stilgestaan bij een aantal voordelen van YAML pipelines. Omdat starten met YAML vaak lastig blijkt, geef ik in dit blog 6 tips om met YAML te starten en om meer uit YAML pipelines te halen.

Task assistent

Zes tips om te starten met YAML pipelinesDe task assistent geeft een visuele weergave van de pipeline tasks en de bijbehorende input mogelijkheden. Vooral als je gewend bent aan de visuele weergaven van de classic pipeline zal dit een welkome functie zijn. Ik merk dat veel mensen het lastig vinden om te beginnen met YAML, omdat niet altijd duidelijk is welke velden een taak heeft of welke waardes je mee kunt geven. Als je de pipeline maakt of bewerkt vanuit Azure Pipelines in de browser, is er een taak assistent beschikbaar.

Je krijgt daar een lijst met taken die je kunt gebruiken in jouw pipelines. Zodra je op een taak klikt, krijg je de laatste versie van die taak te zien en kun je de velden invullen zoals je dat in de classic pipelines deed.

Waar je even op moet letten, is dat je in de YAML pipeline de cursor op de juiste plek hebt staan. Soms kopieer ik ergens een variabele vandaan en is die tekst nog geselecteerd in de editor. Als je dan op Add klikt, komt de nieuwe taak op de plek van die geselecteerde tekst terecht. Als je zorgt dat je cursor op de juiste plek staat, komt de taak op de plek waar jij hem wilt.

Soms heb je al een bestaande pipeline met daarin taken. Als je deze pipeline vanuit Azure DevOps bewerkt, zie je boven alle taken settings staan. Als je hier op klikt, krijg je het visuele scherm van die taak te zien en kun je aanpassingen doen. In de editor wordt ook de hele taak geselecteerd, dus als je vervolgens op Add klikt, komt de wijziging op de juiste plek terecht.

Zes tips om te starten met YAML pipelines

Valideer je pipeline

Veel ontwikkelaars werken het liefst vanuit hun favoriete IDE. Sommige van die IDE’s kunnen ook goed overweg met YAML pipelines. Maar zelf vind ik het soms toch erg handig om even de pipeline te valideren in de web interface van Azure DevOps.

Je moet hiervoor eerst naar de pipelines. Vervolgens klik je op Edit en kun je rechtsboven op de elipsis klikken en daar krijg je de optie Validate. Hiermee valideert Azure DevOps of jouw pipeline voldoet en gedraaid kan worden. Ook als je gebruik maakt van templates, worden deze meegenomen in de validatie.

Zes tips om te starten met YAML pipelines

Verschillende pipelines per branch

Omdat je YAML pipelines onderdeel zijn van je Git repository, kan je pipeline (de YAML code) per branch ook verschillen. Wij adviseren overigens niet om per branch een andere versie van je pipeline te hebben, maar dit hooguit te gebruiken om aanpassingen op je pipeline door te voeren. Waar je bij classic pipelines een pipeline hebt die je voor verschillende branches kan starten, wordt bij YAML pipelines ook de pipeline gebruikt die bij die branch hoort. Het grote voordeel hiervan is dat je aanpassingen aan de pipeline zelf kunt testen, zonder dat het invloed heeft op andere branches.

We merken in de praktijk dat veel klanten dit een lastig concept vinden, die zijn gewend aan het idee dat je pipeline altijd hetzelfde is, ongeacht voor welke branch je de pipeline start.

Als je bepaalde taken, jobs of stages per branch wel of niet uit wilt voeren, kun je dit beter via conditions configureren. Bijvoorbeeld als je alleen naar productie wilt deployen vanuit een main branch, dan neem je dit op in de condition van de productie stage en niet door in Main een andere versie van de YAML pipeline te gebruiken.

Split en Each

Met de Split functie kun je, een string opsplitsen in een array van substrings. Met Each kun je door een array of door parameters van het object type lopen. Hieronder zie je hoe je deze functies kunt combineren om veel herhalingen in je pipeline te voorkomen.

We hebben twee variabelen. Een voor de omgevingen en een voor de apps die gedeployed moeten worden. Beide bevatten een komma gescheiden lijst, die we met de split functie opsplitsen naar een array van omgevingen. Met Each lopen we vervolgens door die array heen en voegen we een stage toe per omgeving. Hetzelfde doen we vervolgens met de apps, waarbij we per app een losse step toevoegen:

Zes tips om te starten met YAML pipelines

Het resultaat is een pipeline met verschillende stages waarin voor iedere app een stap wordt uitgevoerd:

Zes tips om te starten met YAML pipelines

De convertToJson functie

We hebben meerdere teams geholpen bij het opzetten van templates in YAML. Zodra je verschillende templates aan elkaar gaat koppelen of zodra je gaat werken met dependencies en variabelen uit andere stages, is het weleens handig om even te kijken hoe een bepaald object eruit ziet. Een handig hulpmiddel daarbij vind ik de convertToJson functie.

Stel je hebt een YAML pipeline met een build stage en een deploy stage waarin je variabelen nodig hebt uit de build stage. Dan kun je zo’n variabele benaderen door te werken met dependencies en output variables. In een van de stages definieer je een aantal output variabelen:

Zes tips om te starten met YAML pipelines

En in een opvolgende stage kan je deze output variabelen benaderen door gebruik te maken van stageDependencies:

Zes tips om te starten met YAML pipelines

Het kan gebeuren dat je ergens een foutje maakt, je haalt bijvoorbeeld de namen van een stage, job, task en/of variabele door elkaar. Of je verwacht ergens een variabele, maar die lijkt dan toch niet beschikbaar. Dan kun je met de convertToJson functie bekijken hoe het hele stagedependencies object eruit ziet:

Zes tips om te starten met YAML pipelines

Zes tips om te starten met YAML pipelines

Tool installatie en toevoegen aan PATH

Azure DevOps biedt voor veel tools een installatietaak aan waarmee je zelf kunt bepalen welke versie van een tool je wilt gebruiken. Denk aan nuget, nodeJS, kubectl en nog veel meer. Soms heb je toch nog een tool nodig die niet via zo’n installatietaak heeft en die nog niet beschikbaar is op de build Agent.

Het installeren van zo’n tool kun je vaak wel met een script regelen. Waar we recent tegenaan liepen, was dat die tool vervolgens in een volgende taak binnen dezelfde job nodig was. Die taak ging er vanuit dat het pad naar die tool beschikbaar was in de environment variabele PATH. Ook dat is wel te scripten, alleen is die nieuwe environment variabele dan nog niet beschikbaar in de volgende taak, omdat de environment variabelen ingelezen worden bij de start van een job.

Azure DevOps biedt daarvoor de optie prependpath. Nadat je een tool geïnstalleerd hebt, kun je het pad toevoegen aan de PATH variabele in de huidige Job. Hieronder een voorbeeld voor Poetry, een package manager voor Python. Deze moest geïnstalleerd worden omdat Mend (voorheen bekend als WhiteSource) de Poetry packages op moest halen.

echo "##vso[task.prependpath]$(AGENT_TOOLSDIRECTORY)/poetry/bin"

Vervolgens draait Mend in de volgende taak succesvol, omdat Poetry beschikbaar is in het PATH.

Conclusie

Beginnen met YAML pipelines kan erg lastig zijn, maar Azure DevOps biedt wel een aantal opties om het eenvoudiger te maken. Onze ervaring leert wel dat het een stap is die de moeite waard is om te zetten.

Ook aan de slag met YAML pipelines? Of wil je meer weten over Azure DevOps en wat het voor jouw organisatie kan betekenen? Neem dan gerust contact met ons op via info@delta-n.nl of bel naar 085 487 52 20.

Mike Beemsterboer, DevOps Consultant

  • Wil jij ook werken aan een Modern Ontwikkelproces bij klanten? Bekijk vacatures!