Hoe we Azure DevOps build- en release pipelines configureren

-

Als je software bouwt voor de cloud, dan wil deze graag regelmatig uitrollen. Hierom wil je een goed Azure DevOps build en release pipeline configureren. 

Azure DevOps biedt meerdere starter templates voor het configureren voor build en release pipelines, maar in de meeste gevallen voldoen deze niet helemaal aan je behoeften, vooral wanneer je een DTAP omgeving moet implementeren. Ik zal stap voor stap een volledig functionerende build- en release pipeline laten zien op basis van de minimale ‘Starter Template’ die Azure DevOps biedt. Aan het einde van deze blogpost vind je een link naar de gebruikte voorbeeldsjablonen.

De pipeline wordt opgeslagen in git

Voorheen leefden de build en release pipelines in Azure DevOps en waren ze niet gekoppeld aan een versie van de software. Dat leverde problemen opleverde wanneer je een oude versie van de code moest bouwen of uitrollen. Gelukkig is dit veranderd! De pipeline kan nu worden opgeslagen in git zodat deze eenvoudig meegroeit met de development.

Ik maak altijd twee mappen in de root van mijn repo:

  • .azure: in deze map worden de ARM template en andere gerelateerde bestanden opgeslagen.
  • .azuredevops: deze map bevat de build- en release pipeline.

De pipeline die ik als basis gebruik voor mijn build- en release pipeline.

Onderstaande afbeelding toont de wijzigingen die ik heb aangebracht in het starter template. Onder de foto zal ik de veranderingen beschrijven en toelichten.

The build- and release pipeline

Stap 1: Introduceer stages en jobs

In het eerste blok, wrap ik de normale build template in een Build Stage. Dit stelt me in staat om later release stages toe te voegen.

Stap 2: Voeg ARM template validatie toe aan de build

Ik wil geen verrassingen bij het uitrollen naar Azure, dus valideer ik de ARM template tijdens de build. Om het ARM template te valideren, stel je de deployment-mode in op Validation. Wanneer variabelen aan de template moeten worden doorgegeven, kun je ‘dummy’ values doorgeven als override parameters.

Nadat de validatie is voltooid, wordt de template gekopieerd naar de artifact staging directory.

In de pipeline wordt op een aantal plekken verwezen naar een Azure abonnement (hier: azureSubscription: “<spn4Test>”). Dit is de naam van de service connection zoals die geconfigureerd is in Azure DevOps onder Project Settings -> Pipelines -> Service Connections en bevat de credentials die gebruikt worden om uit te rollen naar Azure.

Stap 3: Voeg de release stages toe

We kunnen nu de eerste deployment stage aan het einde van het bestand toevoegen. Aangezien de release stages alleen verschillen in variabelen, zullen we een deploy template voor de release introduceren. Ik zal de template verderop in deze blogpost beschrijven.

De deployment stage bevat de volgende elementen die enige uitleg behoeven

  • condition: alleen als aan deze voorwaarde voldaan wordt, wordt de release gedaan. Dus als de build wordt getriggerd door een pull request, wordt de release niet gestart omdat de branche-name niet overeenkomt met ‘master’.
  • dependsOn: definieert de voorgaande fase. Als de condition ‘succeeded()’ is, zal de genoemde fase een succesvol moeten zijn.
  • variables: je kunt hier een variable group koppelen die is gedefinieerd in de Azure DevOps library. Naar deze variabelen kan worden verwezen als $(variable-name), hier of in de deploy-template.

Stap 4: Voeg deploy.yml toe aan git

Hieronder staat een eenvoudige deploy.yml, maar deze kan zo complex worden als je nodig hebt. Ik bepaal eerst, op basis van de parameters, enkele variabelen die ik later kan gebruiken.

Het gebruik van variabelen in de pipeline vereisen speciale aandacht:

  • Variabelen die gedefinieerd zijn in azure-pipelines.yml zijn hier beschikbaar. Dat kan verwarrend zijn. Vooral als ze dezelfde naam hebben als de parameters
  • Verwar de parameters niet met de variabelen:
    • Parameters worden aangeduid met ${{parameters.parameter-name}}
    • Variables worden aangeduid met $(variable-name)

The deploy template

Stap 5: Configureer release approvals

Ik kan nu goedkeuringen aan de pipeline toevoegen door de omgeving in de pipeline in te stellen (hier op regel 20: environment: “${{parameters.environmentLong}}”). 

Na de eerste run wordt de omgeving automatisch aangemaakt in Azure Devops, maar dat kan ook handmatig gedaan worden. Ga hiervoor naar het tabblad Environments onder Pipelines in Azure DevOps en creëer een nieuwe Environment.

De approvals kunnen worden ingesteld zodra de omgeving is gemaakt. Ga hiervoor naar naar het tabblad Environments onder Pipelines in Azure DevOps, klik op de puntjes, selecteer ‘Approvals and checks’ en selecteer ‘Approvals’.

 

Approvals and checks

Add Approvals

Configureer de approval

Configure Approvals

Ik heb nu een mooie Azure DevOps build- en release pipeline die kan meegroeien met mijn development. Door de pipeline op te slaan in git, heb ik volledige versiebeheer over de pipeline en kan ik wijzigingen aanbrengen op het moment dat deze nodig zijn.

Deze templates zijn te vinden op GitHub.