Skip to content
Learni
View all tutorials
DevOps

Comment configurer un pipeline CI/CD Azure DevOps en 2026

18 minINTERMEDIATE

Introduction

Azure DevOps permet d'automatiser l'ensemble du cycle de vie applicatif grâce à des pipelines YAML puissants. En 2026, les pipelines multi-stages avec contrôles de qualité intégrés sont devenus la norme pour les équipes DevOps matures. Ce tutoriel vous guide pas à pas dans la création d'un pipeline CI/CD production-ready pour une application Node.js déployée sur Azure App Service. Vous apprendrez à structurer vos fichiers YAML, gérer les variables et secrets, et implémenter des gates de déploiement.

Prérequis

  • Compte Azure DevOps et abonnement Azure actif
  • Azure CLI installé et configuré
  • Connaissances de base en YAML et conteneurs Docker
  • Application Node.js simple à déployer

Étape 1 : Initialiser le repository et le pipeline

Créez un nouveau repository dans Azure DevOps et ajoutez le fichier azure-pipelines.yml à la racine.

Pipeline de build de base

azure-pipelines.yml
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  azureSubscription: 'MyAzureConnection'
  appName: 'myapp-prod'

stages:
- stage: Build
  jobs:
  - job: Build
    steps:
    - task: NodeTool@0
      inputs:
        versionSpec: '20.x'
    - script: |
        npm ci
        npm run build
      displayName: 'Build application'

Ce pipeline déclenche un build sur chaque push sur main. Il utilise Node 20 et exécute les commandes de build. Le nom de la connexion Azure doit être créé manuellement dans les paramètres du projet.

Étape 2 : Ajouter les tests et l'analyse de code

Intégrez des tests unitaires et SonarQube pour garantir la qualité avant tout déploiement.

Ajout des tests et qualité

azure-pipelines.yml
    - script: |
        npm test -- --coverage
      displayName: 'Exécuter les tests'
    - task: SonarQubePrepare@5
      inputs:
        SonarQube: 'SonarConnection'
        scannerMode: 'CLI'
        configMode: 'manual'
        cliProjectKey: 'myapp'
    - task: SonarQubeAnalyze@5

Les tests sont exécutés avec couverture. SonarQube est configuré pour analyser le code. Le pipeline échouera automatiquement si la qualité n'est pas atteinte.

Étape 3 : Déploiement en staging

Ajoutez un stage de déploiement vers l'environnement de staging avec validation manuelle.

Stage de déploiement staging

azure-pipelines.yml
- stage: DeployStaging
  dependsOn: Build
  jobs:
  - deployment: Deploy
    environment: 'staging'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs:
              azureSubscription: $(azureSubscription)
              appName: 'myapp-staging'
              package: '$(System.DefaultWorkingDirectory)/dist'

Ce stage utilise le modèle deployment job avec environnement Azure DevOps. Il permet d'activer des approbations manuelles et des gates avant production.

Étape 4 : Déploiement en production

Finalisez avec un stage production protégé et conditionné.

Stage production avec condition

azure-pipelines.yml
- stage: DeployProduction
  dependsOn: DeployStaging
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  jobs:
  - deployment: Deploy
    environment: 'production'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs:
              azureSubscription: $(azureSubscription)
              appName: $(appName)
              package: '$(System.DefaultWorkingDirectory)/dist'

Le stage production s'exécute uniquement sur main et après validation du staging. L'utilisation de variables rend le pipeline réutilisable entre projets.

Étape 5 : Variables et secrets

Externalisez la configuration dans les variables de pipeline et Azure Key Vault.

Configuration des variables

azure-pipelines.yml
variables:
- group: 'myapp-variables'
- name: 'azureSubscription'
  value: 'MyAzureConnection'

steps:
- task: AzureKeyVault@2
  inputs:
    azureSubscription: $(azureSubscription)
    KeyVault: 'myapp-kv'
    SecretsFilter: '*'
    RunAsPreJob: true

Les variables sont chargées depuis un groupe de variables partagé. Les secrets sont injectés depuis Key Vault à l'exécution pour éviter tout stockage en clair.

Bonnes pratiques

  • Toujours utiliser des deployment jobs pour les déploiements
  • Protéger les branches main avec des branch policies
  • Externaliser toutes les configurations dans des variable groups
  • Ajouter des conditions explicites sur les stages de production
  • Versionner les images Docker avec le Build.BuildId

Erreurs courantes à éviter

  • Oublier la condition de branche sur les déploiements production
  • Utiliser des scripts inline trop longs au lieu de templates
  • Ne pas configurer d'approbations sur les environnements critiques
  • Stocker des secrets directement dans le fichier YAML

Pour aller plus loin

Découvrez nos formations avancées sur Azure DevOps et les pipelines YAML sur learni-group.com/formations.