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
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é
- script: |
npm test -- --coverage
displayName: 'Exécuter les tests'
- task: SonarQubePrepare@5
inputs:
SonarQube: 'SonarConnection'
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: 'myapp'
- task: SonarQubeAnalyze@5Les 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
- 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
- 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
variables:
- group: 'myapp-variables'
- name: 'azureSubscription'
value: 'MyAzureConnection'
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: $(azureSubscription)
KeyVault: 'myapp-kv'
SecretsFilter: '*'
RunAsPreJob: trueLes 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.