Ga naar hoofdinhoud

Azure Pipelines-tutorial: Een complete CI/CD-gids voor beginners

Deze tutorial leidt je door het opzetten, uitvoeren en optimaliseren van CI/CD-workflows met Azure Pipelines.
Bijgewerkt 1 jun 2026  · 15 min lezen

Als je CI/CD-pipeline steeds stukloopt of traag en stroperig aanvoelt, ben je niet de enige. Ik heb te maken gehad met mislukte builds, niet-overeenkomende omgevingen en teamgenoten die per ongeluk mijn werk overschreven. Azure Pipelines haalt deze frustraties weg met een cloud-hosted service die bijna elk project op elk platform kan bouwen, testen en deployen.

Daarom laat ik je in deze tutorial zien hoe je:

  1. Je eerste Azure Pipeline maakt
  2. Je project in de cloud bouwt
  3. Geautomatiseerde tests toevoegt om fouten vroeg te vangen
  4. Met één push naar staging of productie deployt
  5. Je pipeline monitort en optimaliseert voor snelheid en betrouwbaarheid
  6. Best practices volgt die zich in echte projecten hebben bewezen

Laten we beginnen!

Wat is Azure Pipelines?

Azure Pipelines is een cloudgebaseerde oplossing die het ontwikkelen, testen en deployen van applicaties vereenvoudigt. 

Het is een onderdeel van de Azure DevOps-toolkit, die de volledige softwareontwikkelingscyclus ondersteunt. Het is ook een flexibele optie voor teams van elke grootte, omdat het verschillende platforms en programmeertalen ondersteunt. Het is geïntegreerd met GitHub, Azure Repos en andere bekende versiesystemen. 

De kernfuncties van Azure Pipelines zijn: 

Service

Doel

Ondersteuning voor meerdere platforms

Azure Pipelines automatiseert het bouwen en deployen van applicaties voor diverse besturingssystemen, zoals Linux, macOS en Windows.

Integratie met versiebeheer

Azure Pipelines maakt verbinding met je coderepositories zoals Azure Repos, GitHub en andere bekende versiesystemen.

YAML-gebaseerde pipelineconfiguratie

Azure Pipelines laat ons onze build- en deploymentprocessen als code definiëren, wat versiebeheer mogelijk maakt.

Continue integratie en continue deployment (CI/CD)

Azure Pipelines faciliteert het end-to-end proces van het integreren van codewijzigingen en het deployen van applicaties.

Uit mijn ervaring is Azure Pipelines nuttig voor iedereen die binnen zijn team proper CI/CD wil realiseren. Het is flexibel, schaalbaar en integreert goed met andere Azure services.

Azure Pipelines-architectuur is een opzet die het bouwen, testen en deployen van code automatiseert. Het begint met ontwikkelaars die hun codewijzigingen naar een repository pushen. Het systeem voert vervolgens een reeks geautomatiseerde taken uit, zoals code-linting, builden en testen. Zodra deze taken zijn voltooid, wordt de code gedeployed naar verschillende omgevingen zoals staging en productie. Deze architectuur zorgt ervoor dat codewijzigingen consistent en betrouwbaar worden geleverd, wat teams helpt om software van hoge kwaliteit te behouden.

Azure Pipelines-architectuur (Bron: Microsoft).

Als je een bredere kijk op Azure DevOps zoekt dan alleen pipelines, dan Azure DevOps-tutorial loopt het volledige CI/CD-traject van begin tot eind door.

Je eerste Azure Pipeline opzetten

Om met de Azure Pipelines-omgeving te werken, moeten we eerst alles inrichten om een end-to-end build-, test- en deploymentproces te ondersteunen.

Vereisten

Voordat je je eerste pipeline gaat maken, zorg dat je het volgende hebt:

  1. Azure DevOps-account en organisatie ingesteld: Meld je aan voor een Azure DevOps-account als je er nog geen hebt. Maak een organisatie om je projecten te beheren. 
  2. Repository: Je hebt een coderepository met een voorbeeldproject nodig. Dit kan gehost worden in Azure Repos of GitHub. Voor deze tutorial gebruiken we een eenvoudig Node.js-project.
  3. Toegang tot Azure-portal: Je hebt ook toegang nodig tot de Azure-portal wanneer je wilt deployen naar Azure-services zoals Azure Kubernetes Service (AKS) en nog veel meer.

Als je je kennis van het bredere Azure-ecosysteem wilt opfrissen, raad ik de cursus Understanding Microsoft Azure aan. 

Een nieuw project en repository aanmaken

Nu je Azure DevOps-account en -organisatie klaar zijn, gaan we ons eerste project en repository maken.

  • Maak een nieuw project:
    • Log in op je Azure DevOps-account.
    • Klik op New Project, geef het een naam (bijv. "AzureDevOps-DataCamp-Tutorial"), en kies de zichtbaarheid (public of private).
    • Klik op Create Project.

Een nieuw project instellen in Azure DevOps is eenvoudig:

Voer de projectdetails in, inclusief de projectnaam, een korte beschrijving en stel de zichtbaarheid in (public of private).

Klik tot slot op "Create the Project" om te starten.

  • Een repository instellen:
    • Als je Azure Repos gebruikt, ga dan naar de sectie Repos en initialiseer een nieuwe repository.
    • Je kunt ook een bestaande GitHub-repository koppelen door Import Repository te selecteren.
    • Geef je repository een naam, kies je Repository type (Git of TFVC), plak je gekloonde repository-URL en klik op Import.

Een versiebeheersysteem kiezen is essentieel in Azure Pipelines bij het beheren van je code. Hier zijn twee opties:

Git: Een gedistribueerd versiebeheersysteem dat modern is en breed wordt gebruikt in de ontwikkelaarscommunity. Het is de beste keuze voor de meeste projecten.

TFVC (Team Foundation Version Control): Een centraal versiebeheersysteem, minder gangbaar en vaak gebruikt in legacyprojecten.

Deze intuïtieve lay-out helpt je te beslissen welk systeem het best bij de behoeften van je project past.

  • Als je GitHub gebruikt, kun je je GitHub-account koppelen aan Azure DevOps door linksonder in je projectinterface te gaan naar Project Settings > GitHub Connections > Connect your GitHub account te selecteren.

Illustratie die laat zien hoe je een GitHub-account koppelt aan Azure DevOps door linksonder naar Project Settings te navigeren.

Selecteer daarna GitHub Connections.

Klik tenslotte op Connect your GitHub account.

Voor deze tutorial gebruiken we Azure Repos als onze coderepository. Als je net begint of geen specifieke reden hebt om TFVC te kiezen, raad ik je aan om voor Git te gaan.

Je eerste pipeline maken

Het is tijd om onze eerste pipeline te maken. Volg de onderstaande stappen:

  • Klik in je Pipelines-sectie op Create Pipeline.

Navigeer naar de sectie Pipelines binnen je Azure DevOps-project:

Open je Azure DevOps-project.

Klik in het menu aan de linkerkant op Pipelines.

In deze sectie beheer je efficiënt je build- en releasepipelines.

Klik op Create Pipeline om te beginnen met het opzetten van een nieuwe pipeline.

Deze eenvoudige stap helpt je om je workflows binnen Azure DevOps te automatiseren.

  • Selecteer Azure Repos Git als bron en kies je repository.

Kies een bron voor je pipeline:

Selecteer Azure Repos Git als bron.

Kies vervolgens de repository waar je mee wilt werken.

Dit eenvoudige proces zorgt dat je de juiste coderepository aan je pipeline koppelt voor efficiënt beheer.

  • Je kunt je pipeline configureren met de YAML- of Classic-editor. We kiezen voor YAML, een codegebaseerde manier om de pipeline te definiëren.
  • Sla de pipeline op en voer hem uit om te zien of alles correct werkt.

Kiezen tussen YAML en Classic Editor

Azure Pipelines biedt twee manieren om je pipelines te definiëren:

  • YAML-pipelines: Een codegebaseerde manier om je pipeline te beschrijven. Ze worden gedefinieerd in een .yaml- of .yml-bestand in je bronrepository, wat versiebeheer en betere samenwerking mogelijk maakt.
  • Classic Editor: Classic Editor is een gebruiksvriendelijke, visuele drag-and-drop-interface die minder flexibel is voor complexe scenario's.

Aspect

YAML-pipelines

Classic Editor

Versiebeheer

YAML-pipelines ondersteunen versiebeheer en worden opgeslagen in de broncode-repository.

Classic Editor ondersteunt geen versiebeheer. Het is gebaseerd op een grafische interface (GUI).

Flexibiliteit

YAML-pipelines hebben hoge flexibiliteit.

Classic Editor heeft beperkte flexibiliteit.

Beste voor

YAML-pipelines zijn het best voor langetermijn-, complexe workflows en automatisering.

Classic Editor is het meest geschikt voor snelle setups.

Uit mijn ervaring bieden YAML-pipelines meer flexibiliteit en zijn ze beter voor teams die Infrastructure as Code (IaC) toepassen. Maar de Classic Editor is perfect voor nieuwkomers die liever visueel werken. 

Voor schaalbaarheid op de lange termijn worden YAML-pipelines echter aanbevolen boven Classic Editor.

Bouwen met Azure Pipelines

Laten we nu bekijken hoe we kunnen bouwen met Azure Pipelines. 

In deze sectie specificeren we de stappen die Azure Pipelines neemt om je code te bouwen, zoals afhankelijkheden installeren, compileren en tests uitvoeren. We drukken deze stappen uit in een configuratiebestand in onze broncode-repo met YAML, een eenvoudige, goed leesbare manier om stappen in een recept te beschrijven.

YAML-pipelinesyntaxis

Hier is een eenvoudig voorbeeld van een YAML-pipeline:

# This section defines the trigger(s) for the pipeline.
# 'main' specifies that the pipeline will run whenever changes are pushed to the 'main' branch.
trigger:
- main  # automatically triggers this pipeline when changes are made to the 'main' branch.

# This defines the pool where the pipeline will run.
# 'ubuntu-latest' specifies the virtual machine image for executing tasks.
pool:
  vmImage: 'ubuntu-latest'  # This uses the latest Ubuntu image provided by Azure DevOps.

# Steps contain the individual tasks or actions that the pipeline will execute.
steps:
- script: echo Hello, world!  # A script task to run shell commands. This one prints "Hello, world!".
  displayName: 'Run my first pipeline script'  # A friendly name for this step, making it easier to identify in the pipeline logs.

Laten we de code stap voor stap doornemen:

  • trigger: Geeft de branch aan die de pipeline triggert (bijv. main).
  • pool: Definieert de buildagent (bijv. ubuntu-latest).
  • steps: Lijst met taken die worden uitgevoerd, zoals afhankelijkheden installeren en een buildscript draaien.

Buildstappen configureren

Om buildstappen toe te voegen aan je YAML-pipeline, definieer je het ‘script’ onder de sectie ‘steps’.

Voor een eenvoudige Node.js-applicatie bevat ons azure-pipelines.yml-bestand hieronder bijvoorbeeld code die Azure DevOps automatisch heeft aangemaakt.

# Node.js
# Build a general Node.js project with npm.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '20.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run build
  displayName: 'npm install and build'

Laten we naar de build-steps in de YAML-pipeline hierboven kijken: 

  1. Node.js installeren: Gebruik de taak NodeTool@0 om de Node.js-versie te specificeren. 
  2. Afhankelijkheden installeren: Voer npm install uit om projectafhankelijkheden te installeren. 
  3. Code compileren (project builden): Voer npm run build uit om de code te compileren. 

De pipeline uitvoeren

Onze pipeline kan handmatig worden getriggerd of automatisch draaien wanneer er gebeurtenissen zoals pushes naar een branch plaatsvinden.

  • Handmatige trigger: Klik op Run Pipeline in de Azure DevOps-interface om de pipeline handmatig te starten.

Knop Run Pipeline in de Azure DevOps-interface om de pipeline handmatig te starten.

  • Automatische trigger: Stel triggers in op basis van repository-evenementen zodat pushes naar de main-branch de pipeline automatisch starten. Hier is een voorbeeld:
trigger:
- main

Na het uitvoeren van je pipeline kun je logs bekijken en problemen oplossen.

Ga om logs te openen naar de samenvatting van je pipeline-run en selecteer de specifieke job of taak. Hierdoor worden de logs voor die stap weergegeven; net als op de afbeelding hieronder kun je elke job (Build, Push of Update) kiezen om de ruwe logs te bekijken.

Samenvatting van pipeline-run met jobopties (Build, Push, Update) om ruwe logs per stap te bekijken.

Samenvatting van pipeline-run met jobopties (Build, Push, Update) om ruwe logs per stap te bekijken.

Voor het oplossen van veelvoorkomende problemen kun je je pipeline controleren op zaken als time-outs, resourcebeperkingen of misconfiguraties.

Tests toevoegen aan je pipeline

Je voegt tests toe aan je pipeline om de codekwaliteit te waarborgen en problemen vroeg in de ontwikkeling te ontdekken. In Azure Pipelines kun je unit-, integratie- of andere tests integreren door stappen in je pipelineconfiguratie toe te voegen.

Teststappen configureren

Neem teststappen op in je pipeline om de codekwaliteit te garanderen. Je kunt populaire frameworks gebruiken zoals Jest, Mocha of NUnit. Hieronder staat bijvoorbeeld hoe je unit-tests met Jest toevoegt:

- script: |
    npm test
  displayName: 'Run unit tests with Jest'

Testresultaten bekijken

Azure Pipelines heeft ingebouwde testrapportage. Je kunt het publiceren van testresultaten instellen voor eenvoudiger bijhouden en testresultaten bekijken in de pipelinelogs. Zo doe je dat:

  • Navigeer eerst naar Builds > Test Results.
  • Gebruik om testresultaten te publiceren de taak PublishTestResults@2 om resultaten weer te geven. Dit maakt het algemene bijhouden eenvoudiger. Bijvoorbeeld:
- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/test-results.xml'
    testRunTitle: 'Unit Tests'

Deployen met Azure Pipelines

In de deploymentstappen in je Azure-pipeline-YAML-bestand kun je je applicatie automatisch naar verschillende omgevingen deployen, zoals testing, staging en productie. In deze sectie bekijken we een paar manieren om te deployen met Azure Pipelines.

Deployen naar Azure Web Apps

Azure Web Apps is een service in de Azure-portal waarmee je webapplicaties op schaal kunt ontwikkelen, deployen en beheren. 

Om naar Azure Web Apps te deployen, moet je de twee services koppelen. Zo doe je dat:

  • Ga linksonder in je project naar Project Settings en klik op Service Connections onder de Pipelines sectie. 

Azure DevOps-interface met de optie Project Settings linksonder om Azure-services te koppelen.

Navigeer naar de sectie Pipelines:

Klik op Service Connections onder de sectie Pipelines.

Deze stap helpt je te koppelen aan Azure-services en zo de mogelijkheden en integraties van je project te vergroten.

  • Klik op New Service Connection en kies Azure Resource Manager

Een nieuwe serviceverbinding instellen:

Klik op New Service Connection.

Dit eenvoudige proces helpt je verbinding te maken met Azure-resources en zo de mogelijkheden van je project te vergroten.

Een nieuwe serviceverbinding instellen:

Kies Azure Resource Manager.

Dit eenvoudige proces helpt je verbinding te maken met Azure-resources en zo de mogelijkheden van je project te vergroten.

  • Authenticeer met je Azure-account.
  • Deploy naar Azure App Service:
    • Ga terug naar je Pipelines en configureer je pipeline.
    • Voeg in je pipeline een taak toe om naar Azure te deployen.
    • Specificeer de resourcegroep en servicedetails. 

Hier is een voorbeeld van een YAML-deploymentpipeline voor een simpele Node.js-app naar Azure App Service:

# Define the task for deploying to an Azure Web App
- task: AzureWebApp@1
  inputs:
    # This specifies your Azure subscription service connection
    azureSubscription: 'your-azure-subscription'
    # This specifies the name of your web app
    appName: 'your-app-name'
    # This specifies the location of the app package or files to be deployed
    package: '$(Build.ArtifactStagingDirectory)'

Laten we de code hierboven opsplitsen, zodat je hem kunt aanpassen aan jouw use-case:

  • Vervang your-azure-subscription door de naam van de serviceverbinding die toegang geeft tot je Azure-subscriptie.
  • Vervang your-app-name door de daadwerkelijke naam van je webapp in Azure. 
  • Vervang $(Build.ArtifactStagingDirectory) door de directory waar het webapppakket of de bestanden voor deployment staan. $(Build.ArtifactStagingDirectory) — Deze variabele verwijst naar de map waar je buildartefacten (je appbestanden) staan nadat ze zijn gebouwd.

Continue deployment (CD) instellen

Zodra alles in onze code alle tests en checks doorstaat, is de volgende stap het instellen van continue deployment. Volg de onderstaande stappen.

Model van Azure Release Pipeline dat laat zien hoe artefactbronnen de releasepipeline voeden voor deployment.

Deploymentmodel voor Azure-releasepipeline (Bron: Microsoft)

  • Maak een releasepipeline:
    • Ga naar Pipelines > Releases en klik op New Pipeline.

Azure DevOps-interface met het pad om een releasepipeline te maken via Pipelines > Releases en New Pipeline selecteren.

Een releasepipeline maken in Azure DevOps is eenvoudig:

Navigeer in het menu links naar de sectie Pipelines.

Klik op Releases.

Selecteer vervolgens New Pipeline om je releaseproces in te richten.

Deze gebruiksvriendelijke interface helpt je releaseworkflows efficiënt te beheren en te automatiseren.

  • Selecteer de template Azure App Service Deployment.

Azure DevOps-interface met de optie om de Azure App Service Deployment-template te selecteren voor het opzetten van de releasepipeline.

  • Omgevingen configureren:
    • Voeg de omgevingen Dev, Staging, QA en Production toe en configureer ze, waar je applicatie moet worden gedeployed.

Azure DevOps-interface met geconfigureerde omgevingen zoals Dev, Staging, QA en Production voor deployment van applicaties.

  • Koppel het artefact van je buildpipeline als bron voor de releasepipeline door Add an artifact te selecteren.

Azure DevOps-interface met de optie om een artefact van de buildpipeline toe te voegen als bron voor de releasepipeline.

  • Approvals en gates configureren:
    • Het instellen van pre-deployment approvals voor gevoelige omgevingen, zoals productie, is noodzakelijk. Bijvoorbeeld: een teamleider moet de release goedkeuren. Je kunt ook gates toevoegen, zoals geautomatiseerde tests of monitoringchecks, om te garanderen dat de deployment aan kwaliteitsnormen voldoet.

Uit mijn ervaring is deze fase cruciaal om stabiliteit te behouden in veeleisende ontwikkelomgevingen. Approvals en gates bieden controle en zorgen dat alleen hoogwaardige code productie bereikt.

Deployen naar Kubernetes

Kubernetes maakt het eenvoudig om betrouwbare en schaalbare gecontaineriseerde applicaties te draaien. Met Azure Kubernetes Service (AKS) krijg je een beheerde omgeving die deployment en operatie vereenvoudigt. In deze sectie laat ik zien hoe je met Azure Pipelines naar AKS kunt deployen.

Je AKS-cluster voorbereiden

Je kunt een AKS-cluster maken via de Azure-portal of CLI. Hier is een basis Bash-CLI-opdracht om een cluster te provisionen:

az aks create \
  --resource-group <ResourceGroupName> \
  --name <AKSClusterName> \
  --node-count 3 \
  --enable-addons monitoring \
  --generate-ssh-keys

Laten we de opdracht hierboven doornemen:

  • --resource-group: Dit geeft de Azure-resourcegroep aan waarin het AKS-cluster wordt gemaakt.
  • --name: Dit is de naam van je AKS-cluster.
  • --node-count: Hiermee stel je het aantal nodes in het cluster in (bijv. 3 in dit voorbeeld).
  • --enable-addons monitoring: Hiermee worden monitoring en analytics mogelijk met Azure Monitor for Containers.
  • --generate-ssh-keys: Hiermee worden automatisch SSH-sleutels gegenereerd voor veilige node-toegang als ze niet zijn opgegeven.

Vergeet niet <ResourceGroupName> en <AKSClusterName> te vervangen door je daadwerkelijke resourcegroep- en clusternamen.

Na het opzetten van je AKS-cluster moet kubectl worden geconfigureerd. Dit zorgt ervoor dat je pipelineagent of lokale computer met kubectl met het cluster kan communiceren.

Je kunt je Azure-taken versnellen met commandline-tools—deze Azure CLI-cheat sheet is een handige referentie.

Maak een deployment-YAML-bestand 

Laten we als voorbeeld een basis deployment-YAML-bestand nemen voor het deployen van een Docker-image naar Kubernetes:

# This defines the API version and the kind of Kubernetes resource we are creating.
# 'apps/v1' is the API version, and 'Deployment' is the resource type.
apiVersion: apps/v1
kind: Deployment

# Metadata contains information to identify the resource uniquely.
# 'name' specifies the name of the Deployment.
metadata:
  name: my-app  # Name of the Deployment, used for identification.

# "spec" specifies the intended deployment state.
spec:
  # Number of replicas/pods we want for this Deployment.
  replicas: 3  # Ensures high availability by running three app replicas.

  # Selector is used to define the labels that this Deployment will manage.
  selector:
    matchLabels:
      app: my-app  # This ensures that only Pods with the label 'app: my-app' are managed by this Deployment.

  # Template specifies the blueprint for the pods created by the Deployment.
  template:
    metadata:
      labels:
        app: my-app  # Labels for the Pods, matching the selector above.

    # A specification for the containers of the Pods.
    spec:
      containers:
      - name: my-app  # Name of the container. This is useful for linking to the container in logs, etc.
        image: mycontainerregistry.azurecr.io/my-app:latest  # Pull the container image you will call from your container registry.
        ports:
        - containerPort: 80  # The container listens on port 80.

Deployen met Azure Pipelines

Neem in je YAML-pipeline een taak op om naar AKS te deployen.

# This defines a task for deploying Kubernetes manifests within an Azure DevOps pipeline.
- task: KubernetesManifest@0  # Task type for working with Kubernetes manifest files.
  inputs:
    # This configures what to do with the Kubernetes manifest files.
    action: 'deploy'  # 'deploy' action ensures the Kubernetes manifests are applied to the cluster.

    # This defines the namespace where the Kubernetes resources will be deployed.
    namespace: 'default'  # 'default' is the namespace for deploying resources. Change if needed.

    # All this does is point to the manifest files that define the desired state of your Kubernetes resources.
    manifests: '$(Build.ArtifactStagingDirectory)/manifests/*.yaml'
    # The 'manifests' variable points to the location of all the YAML files (e.g., Deployment, Service, etc.) that will be applied during the deployment.

    # To access private container registry images, use the image pull secret.
    imagePullSecrets: 'my-registry-secret'
    # This instructs Kubernetes on which secret to use when pulling images from a private container registry.
    # Ensure that 'my-registry-secret' exists in the namespace before the deploy

Commit en push het YAML-bestand om de deployment te triggeren.

AKS vereenvoudigt containerorkestratie, waardoor schalen, updates en rollbacks makkelijker te beheren zijn. Uit mijn ervaring is het onmisbaar voor moderne cloud-native applicaties.

Je pipelines optimaliseren en monitoren

Vroeger in mijn carrière was het bouwen van pipelines niet de grootste uitdaging—een snelle en betrouwbare pipeline hebben wél. Een goed geoptimaliseerde pipeline maakt niet alleen builds sneller; het vermindert ook frustratie in het team, verlaagt deployrisico’s en versnelt de oplevering. 

Ik deel een paar tips en strategieën die je kunt gebruiken om je Azure DevOps-pipelines snel, georganiseerd en betrouwbaar te houden.

Pipeline-caching

Het installeren van afhankelijkheden is nog zo’n veelvoorkomende bottleneck. Of je nu met npm, .NET of andere pakketmanagers werkt, steeds weer dezelfde afhankelijkheden downloaden kan veel tijd verspillen. Caching van afhankelijkheden en artefacten tussen runs vermindert de uitvoeringstijd drastisch. 

Zo cache je afhankelijkheden in Azure Pipelines.

Bepaal eerst de pakketmanagers, zoals:

  • Node.js (node_modules)
  • NuGet-pakketten
  • Python (pip-pakketten)
  • Maven/Gradle-afhankelijkheden

Azure Pipelines ondersteunt cachingmechanismen, zoals de taak Cache@2, waarmee je afhankelijkheden tussen pipeline-runs kunt cachen. 

Laten we een eenvoudig cachevoorbeeld voor Node.js nemen:

# This task is used to cache files to speed up your pipeline.
- task: Cache@2  # This is the task name for caching files in Azure Pipelines.
  inputs:
    # Key is used to identify the cache. It combines npm (package manager), operating system (OS), and package-lock.json files.
    key: 'npm | "$(Agent.OS)" | package-lock.json'



    # RestoreKeys is an optional value used when the specific cache key is not found. It helps to find a fallback cache.
    restoreKeys: |
      npm | "$(Agent.OS)"



    # Path defines the location of files or folders to be cached.
    # Here, we are caching the 'node_modules' directory to avoid reinstalling dependencies.
    path: '$(Build.SourcesDirectory)/node_modules'



    # CacheHitVar is a variable that stores whether the cache was successfully used (restored).
    # This can be checked later in the pipeline to decide if tasks need to run.
    cacheHitVar: 'NPM_CACHE_RESTORED'

Je kunt vervolgens conditioneel de installatie overslaan als er een cache is. Dit is een slimme check vóór het afronden van de installatie van npm. Het is efficiënte voorwaardelijke logica.

Hieronder een eenvoudig voorbeeld:

# This step runs the command to install Node.js dependencies using npm.

- script: npm install  # Installs packages listed in the package.json file.
  
# The condition checks whether the cache was restored successfully.
# This step will run if the cache is not restored ('NPM_CACHE_RESTORED' is not true).
  condition: ne(variables.NPM_CACHE_RESTORED, 'true')  # Run only if the cache is not restored.

Dit voorbeeld van eenvoudige caching voor een Node.js-applicatie slaat de npm-cachedirectory op met package-lock.json als sleutel. Wanneer je afhankelijkheden niet veranderen, worden ze hersteld, wat minuten per build bespaart. 

Ik heb gezien dat caching de buildtijd drastisch reduceert, vooral in grote projecten, maar alleen als cachesleutels doordacht zijn gekozen. In een van mijn eerdere projecten verminderde dit de buildtijd van een Node.js-app met 55%.

De gezondheid van je pipeline monitoren

Een succesvolle pipeline draait niet alleen om groene vinkjes, zichtbaarheid en snelle feedback. Als er iets stukgaat, wil je dat je team het meteen weet. Zo blijf je problemen voor.

Azure DevOps-dashboards instellen

Azure DevOps biedt ingebouwde widgets om de status van pipelines, recente runs, faalpercentages en gemiddelde doorlooptijden weer te geven. 

  • Navigeer eerst naar Dashboards onder je project.

Azure DevOps-interface met de sectie Dashboards met ingebouwde widgets voor pipelinestatus, recente runs, faalpercentages en gemiddelde doorlooptijden.

  • Klik vervolgens op New Dashboard of gebruik een bestaand dashboard.

Azure DevOps-interface met de optie om een nieuw dashboard te maken of een bestaand te selecteren onder de sectie Dashboards.

  • Je kunt widgets toevoegen zoals: Build History, Release Pipeline Overview, Test Results Trend en meer.

Azure DevOps-interface met opties om widgets toe te voegen zoals Build History, Release Pipeline Overview en Test Results Trend.

Deze zijn essentieel om pass/fail-trends te volgen, te zien welke omgevingen problematisch zijn, en meer.

Alerts configureren voor mislukte pipelines

  • Ga linksonder in je project naar Project Settings.

Azure DevOps-interface met de optie Project Settings linksonder voor het configureren van alerts voor mislukte pipelines.

  • Klik op Notifications.

Azure DevOps-interface met de optie Notifications voor het configureren van pipelinealerts.

  • Klik vervolgens op New Subscription.

Azure DevOps-interface met de optie om een nieuwe subscription voor notificaties te maken onder de sectie Notifications.

Laten we een scenario nemen: Selecteer in de sectie Category de optie Build; selecteer in de Template-sectie  “A build fails”, en klik op Next.

Je krijgt een interface zoals hieronder:

"Azure DevOps-interface met de sectie Category waarin 'Build' is geselecteerd, en de sectie Template met 'A build fails' gekozen voor het maken van een notificatiesubscriptie.

  • Klik ten slotte op Finish.
  • In de sectie Notifications kun je de Build-beschrijving controleren voor de “A build fails” die we eerder hebben aangemaakt. 

Azure DevOps-interface met de sectie Notifications met de Build-beschrijving voor de eerder gemaakte 'A build fails'-notificatie.

Ik miste ooit een kritieke deploymentfout omdat er geen alerts waren ingesteld. Sindsdien stel ik altijd teamalerts in en configureer ik ze voor elke productie-deployment. Zo mis ik nooit een kapotte build of vertraging in mijn releasecyclus.

Pipelineprestaties analyseren

We weten dat zelfs als je pipeline werkt, hij traag kan zijn, en trage pipelines doden productiviteit. Bottlenecks vroeg identificeren bespaart later gedoe.

Pipelinemetrics geven inzicht in de prestaties van builds en deployments. Zo kom je erbij. 

Je moet eerst Analytics Views inschakelen onder de projectinstellingen en verbinden met Power BI of verkennen via ingebouwde grafieken.

Pipelinegezondheid monitoren

  • Ga onder de sectie Pipelines naar Analytics
  • Bekijk metrics zoals pipeline pass rate, test pass rate en pipelineduur.

De gezondheid van je pipeline monitoren:

Ga naar Pipelines en selecteer vervolgens Analytics.

Bekijk belangrijke metrics zoals pipeline pass rate, test pass rate en pipelineduur.

Deze functie helpt je de prestaties van je pipeline bij te houden en ervoor te zorgen dat alles soepel draait.

Let’s verder verkennen wat kernmetrics we in analytics kunnen monitoren en waarom ze ertoe doen:

Metric

Waarom het ertoe doet

Trends in buildduur

Hiermee spot je eenvoudig vertragingen in de tijd.

Faalpercentage per branch

Helpt onstabiele features te identificeren.

Wachttijd in queue

Helpt tekorten aan agents te detecteren.

Een paar maanden geleden werkte ik aan de pipeline van een klant, en wat me het meest opviel was de Wachttijd in queue. Ik ontdekte dat mijn team en ik een self-hosted agentpool overbelast hadden en dat 40% van onze pipelinetijd werd besteed aan wachten op een beschikbare runner. Niemand zag het aankomen totdat de analytics het duidelijk maakten.

We konden dat oplossen door twee extra self-hosted agents toe te voegen en de load te verdelen per taaktype. De resultaten waren direct: de gemiddelde buildtijd voor de pipeline daalde met ongeveer 35%.

Monitoren met logs

Naast metrics zijn timeline-logs goud waard, zeker voor langlopende taken. Door de jaren heen heb ik de gewoonte ontwikkeld om binnen kritieke scriptstappen eigen logmarkeringen toe te voegen om exacte vertragingen te pinpointen.

Hier een eenvoudig voorbeeld:

# This step prints a message to the console in the pipeline logs.
# It helps to mark the start of the dependency installation process.

echo "=== START: Dependency Install ==="  # Display a message indicating the beginning of dependency installation.

Best practices voor Azure Pipelines

Nu we de kernservices van Azure Pipelines en nog veel meer hebben behandeld, kijken we hoe je er het meeste uithaalt door deze best practices te volgen. 

Laten we van performance naar structuur schakelen, want een snelle pipeline die lastig te onderhouden is, schaadt elk team alsnog.

Pipelines organiseren voor teams

Wanneer meerdere teams of omgevingen pipelines delen, wordt het al snel rommelig. Je hebt structuur nodig. Eén gigantische pipeline voor development-, staging- en productieomgevingen leidt tot chaos. 

Om je pipeline te organiseren, moet je hem opdelen per omgeving. Hieronder een eenvoudige structuur. 

Omgeving

Naam pipeline

Trigger

Development

dev.yml

Featurebranches (Draait bij elke commit)

Staging

staging.yml

Pull requests → Staging (Handmatige trigger)

Production

prod.yml

Handmatig of releasepipelines (Goedkeuring vereist)

Belangrijke zaken om te begrijpen van deze eenvoudige structuur:

  • Elk bestand haalt stappen uit gedeelde templates.
  • Elk bestand gebruikt omgeving-specifieke variabelen.
  • Elk bestand regelt toegang via pipeline-permissies.

Uit ervaring maakt deze scheiding debuggen makkelijker en stelt het junior developers in staat om naar de Dev-omgeving te deployen zonder risico voor de Production-omgeving.

Templates en herbruikbare code gebruiken

DevOps draait om het verminderen van handmatig werk en het verbeteren van automatisering in het hele softwareontwikkelingsproces. 

YAML-code is foutgevoelig wanneer die tussen projecten wordt gekopieerd en geplakt. Azure DevOps heeft pipelinetemplates voor een DRY (Don’t Repeat Yourself) setup via YAML-pipelines. Je kunt YAML-pipelinetemplates hergebruiken over meerdere projecten, je pipelines consistent vormgeven en zelfs de pipeline verwerkingstijd verminderen.

Laten we een eenvoudige herbruikbare buildtemplate als voorbeeld nemen.

Definieer eerst je buildtemplate, build-template.yml:

# Here we configure the platform and the build configuration.
parameters:
  buildPlatform: 'Any CPU'  # This specifies the build platform (e.g., Any CPU, x86, x64).
  buildConfiguration: 'Release'  # This specifies the build configuration (Release) to avoid warning.

# A pipeline is composed of steps (a series of tasks that will be executed)
steps:
- task: DotNetCoreCLI@2  # Task for running .NET Core commands in the pipeline.
  inputs:
    command: 'build'  # This runs the 'build' command to compile the project(s).
    projects: '**/*.csproj'  # This specifies to build all .csproj files in the repository.
    arguments: '--configuration ${{ parameters.buildConfiguration }}'
    # This passes the build configuration parameter (e.g., Release or Debug) to the command.

Gebruik je buildtemplate in je hoofd-pipeline:

# A pipeline job is a group of tasks. Here, the job is named 'Build'.
jobs:
- job: Build  # The job name where the build process occurs.

  # Steps define the tasks or actions the pipeline will perform.
  steps:
  - template: templates/build-template.yml  # Reference an external YAML template for reusable steps.

Secrets en variabelen beheren

Bij projecten, vooral in samenwerking, gebruik je vaak gevoelige informatie zoals database-connectionstrings, API-sleutels, wachtwoorden of tokens. Als deze secrets hardcoded in je codebase staan of zichtbaar zijn in logs, kunnen ze eenvoudig worden gecompromitteerd.

Laten we kijken hoe we onze secrets en variabelen veilig beheren met Azure Pipelines-secrets en variabelengroepen.

Stap 1: Een variabelengroep maken

  • Klik op het tabblad Pipelines in de linkerzijbalk.
  • Klik in de sectie Pipelines op Library.

Azure DevOps-interface met het tabblad Pipelines in de linkerzijbalk en de optie Library binnen de sectie Pipelines.

  • Maak een variabelengroep:
    • Klik op het tabblad Variable groups.

Maak eenvoudig een nieuwe variabelengroep:

Ga in Azure DevOps naar Pipelines en selecteer vervolgens Library.

Maak een nieuwe variabelengroep.

Deze stap helpt je variabelen te beheren en te organiseren voor efficiënte pipelineconfiguraties.

  • Klik op de knop Add variable group.
  • Voer een naam in voor je variabelengroep (bijv. MyAppSecrets).

Azure DevOps-interface met de knop Add variable group en een veld om de naam van de variabelengroep in te voeren, zoals MyAppSecrets.

Stap 2: Secrets toevoegen aan de variabelengroep

  • Variabelen toevoegen: 
    • Klik in de variabelengroep op Add om een nieuwe variabele te maken. 

Azure DevOps-interface met de optie om variabelen toe te voegen binnen een variabelengroep door op de knop Add te klikken.

  • Voer de naam van de variabele in (bijv. DB_CONNECTION_STRING).
  • Vink het vakje aan met het label Keep this value secret om het als secret te behandelen. 
  • Voer de waarde van de variabele in (bijv. mijn database-connectionstring).

Azure DevOps-interface met velden om een variabelenaam (bijv. DB_CONNECTION_STRING) in te voeren, te markeren als secret en de waarde in te stellen (bijv. database-connectionstring).

  • Klik op Save om de variabele op te slaan.

Azure DevOps-interface met de knop Save om de nieuw toegevoegde variabele in de variabelengroep op te slaan.

Stap 3: Secrets gebruiken in je pipeline

Nu je een variabelengroep met secrets hebt gemaakt, kun je deze variabelen gebruiken in je pipeline-YAML-bestand.

  • Verwijs naar de variabelengroep: Voeg de variabelengroep toe aan je pipeline-YAML-bestand: 
variables:
- group: MyAppSecrets
  • Gebruik de secrets in je stappen: Je kunt de secrets in je pipelinestappen refereren met de syntaxis $(VariableName). Hier is een voorbeeld van hoe je de DB_CONNECTION_STRING gebruikt in een scriptstap:
# This defines the trigger for the pipeline.
# The pipeline runs automatically whenever changes are pushed to the 'main' branch.
trigger:
- main  # Trigger the pipeline on changes to the 'main' branch.

# The pool specifies the environment where the pipeline will run.
# 'ubuntu-latest' means the pipeline will use the latest Ubuntu operating system image.
pool:
  vmImage: 'ubuntu-latest'  # Use the latest Ubuntu image provided by Azure Pipelines.

# Variables section defines reusable values for the pipeline.
# 'group: MyAppSecrets' links to a variable group that stores sensitive information like secrets.
variables:
- group: MyAppSecrets  # Load secrets, such as database credentials, from a variable group.

# Steps define the tasks that the pipeline will execute one by one.
steps:
- script: |
    echo "Connecting to the database..." # Print a message indicating the start of database connection.
    echo "Connection String: $(DB_CONNECTION_STRING)" # Display the database connection string from the variable group.
  displayName: 'Connect to Database'  # A simple name for this step that appears in the pipeline logs.

Stap 4: De pipeline draaien

  • Zodra je je YAML-bestand hebt opgeslagen, ga je naar de sectie Pipelines en klik je op Run Pipeline.
  • Na het draaien van de pipeline kun je je logs controleren. Je zult zien dat de secretwaarde verborgen is, waardoor je gevoelige informatie veilig blijft.

Conclusie

In deze tutorial hebben we de volledige reis met Azure Pipelines doorlopen—van het opzetten van je eerste pipeline tot het bouwen, testen, deployen, monitoren en optimaliseren ervan.

De deploymentfase vergt oefening. Begin simpel, blijf verbeteren, en na verloop van tijd zul je vertrouwen en vloeiendheid krijgen in het beheren van CI/CD-workflows. Azure Pipelines geeft je de tools, jij brengt de iteratie en het leren.

Met consistente inspanning kun je je ontwikkelproces stroomlijnen en vol vertrouwen software van hoge kwaliteit op schaal leveren.

Om dieper in Azure DevOps en Microsoft Azure te duiken, bekijk de volgende bronnen: 

FAQs

Kan ik Azure Pipelines gebruiken voor niet-Azure-projecten?

Ja, dat kan. Azure Pipelines ondersteunt deployments naar on-premise en diverse cloudomgevingen zoals AWS, GCP en vele andere.

Welke programmeertalen ondersteunt Azure Pipelines?

Azure Pipelines ondersteunt vele programmeertalen, waaronder Node.js, Python, Java, .NET en nog veel meer.

Wat is het verschil tussen Azure Pipelines en GitHub Actions?

Azure Pipelines biedt diepere integratie met het Azure-ecosysteem en robuuste deploymenttools, terwijl GitHub Actions een eenvoudigere, GitHub-native CI/CD-ervaring biedt. Beide ondersteunen YAML-workflows en gecontaineriseerde deployments.

Kan ik Azure Pipelines gebruiken met niet-Microsoft-technologieën zoals Python of Java?

Ja, Azure Pipelines ondersteunt alle grote platforms en talen, waaronder Python, Java, Node.js en meer. Je kunt builds en deployments voor elke tech-stack configureren met YAML.

Is Azure Pipelines gratis te gebruiken?

Azure Pipelines biedt een gratis laag met 1.800 minuten/maand voor publieke projecten en beperkte buildtijd voor privéprojecten. Voor extra gebruik is een betaald abonnement of self-hosted agents vereist.

Wat zijn Azure DevOps Service Connections en waarom zijn ze belangrijk?

Service Connections koppelen Azure Pipelines veilig aan externe services zoals Azure Web Apps of Kubernetes-clusters. Ze zijn essentieel voor geautomatiseerde deployments en infrastructuurbeheer.

Hoe verhoudt Azure Pipelines zich tot Jenkins of CircleCI?

Azure Pipelines biedt een meer geïntegreerde ervaring voor Azure-gebruikers en betere ondersteuning voor Microsoft-services. Jenkins is beter aanpasbaar maar vereist meer setup; CircleCI blinkt uit in snelheid en parallellisme.


Emmanuel Akor's photo
Author
Emmanuel Akor
LinkedIn
Twitter

Emmanuel Akor is een Cloud- & DevOps-engineer die cloudtechnologieën en DevOps-tools inzet om impactvolle projecten te realiseren. Als Computerkunde-afgestudeerde met eervolle vermelding aan Babcock University en voormalig Cloud Co-Lead voor GDSC, combineert Emmanuel academische excellentie met praktische ervaring. Als technisch contentschrijver blinkt hij uit in kennis delen en samenwerken met teams.

Onderwerpen

Leer meer over Azure met deze cursussen!

Cursus

Microsoft Azure begrijpen

3 Hr
47K
Bekijk detailsRight Arrow
Begin met de cursus
Meer zienRight Arrow