Accéder au contenu principal

Tutoriel Azure Pipelines : Un guide complet de CI/CD pour les débutants

Ce tutoriel vous guide dans la configuration, l'exécution et l'optimisation des flux de travail CI/CD à l'aide d'Azure Pipelines.
Actualisé 30 mai 2025  · 15 min de lecture

Si votre pipeline CI/CD ne cesse de se briser ou semble lent et lourd, vous n'êtes pas seul. J'ai eu à faire face à des échecs de construction, à des environnements mal adaptés et à des coéquipiers qui écrasaient accidentellement mon travail. Azure Pipelines supprime ces frustrations grâce à un service hébergé dans le cloud qui permet de construire, tester et déployer presque n'importe quel projet sur n'importe quelle plateforme.

C'est pourquoi, dans ce tutoriel, je vous montrerai comment faire :

  1. Créez votre premier Azure Pipeline
  2. Construisez votre projet dans le cloud
  3. Ajoutez des tests automatisés pour détecter rapidement les erreurs
  4. Déploiement vers la phase d'essai ou la production d'un simple coup de pouce
  5. Surveillez et optimisez votre pipeline pour plus de rapidité et de fiabilité
  6. Suivez les meilleures pratiques qui ont fait leurs preuves dans le cadre de projets réels

Commençons !

Qu'est-ce qu'Azure Pipelines ?

Azure Pipelines est une solution basée sur le cloud qui simplifie le développement, les tests et le déploiement des applications. 

Il s'agit d'un composant de la boîte à outils Azure DevOps, qui prend en charge l'ensemble du cycle de développement des logiciels. Il s'agit également d'une option flexible pour les équipes de toutes tailles, car il prend en charge différentes plates-formes et différents langages de programmation. GitHub, Azure Repos et d'autres systèmes de contrôle de version bien connus y sont intégrés. 

Les principales fonctionnalités d'Azure Pipelines sont les suivantes : 

Service

Objectif

Support multiplateforme

Azure Pipelines automatise la création et le déploiement d'applications pour différents systèmes d'exploitation, tels que Linux, macOS et Windows.

Intégration avec le contrôle de version

Azure Pipelines se connecte à vos référentiels de code comme Azure Repos, GitHub et d'autres systèmes de contrôle de version bien connus.

Configuration du pipeline basée sur YAML

Azure Pipelines nous permet de définir nos processus de construction et de déploiement en tant que code, ce qui permet le contrôle des versions.

Intégration et déploiement continus (CI/CD)

Azure Pipelines facilite le processus de bout en bout d'intégration des modifications de code et de déploiement des applications.

D'après mon expérience, Azure Pipelines est utile à tous ceux qui souhaitent disposer de proper CI/CD au sein de leur équipe. Il est flexible, évolutif et s'intègre bien aux autres services Azure.

L'architecture Azure Pipelines est une configuration qui automatise le processus de construction, de test et de déploiement du code. Le processus commence lorsque les développeurs apportent leurs modifications au code dans un référentiel. Le système exécute ensuite une série de tâches automatisées, telles que l'analyse du code, la construction et les tests. Une fois ces tâches terminées, le code est déployé dans différents environnements tels que la mise en scène et la production. Cette architecture garantit que les modifications de code sont livrées de manière cohérente et fiable, ce qui aide les équipes à maintenir des logiciels de haute qualité.

Architecture des pipelines Azure (Source: Microsoft).

Si vous souhaitez mieux comprendre Azure DevOps au-delà des pipelines, ce tutoriel Azure DevOps waparcourt l'ensemble du cycle de vie CI/CD, du début à la fin.

Mise en place de votre premier pipeline Azure

Pour travailler avec l'environnement Azure Pipelines, nous devons d'abord tout mettre en place pour favoriser un processus de construction, de test et de déploiement de bout en bout.

Conditions préalables

Avant de vous lancer dans la création de votre premier pipeline, assurez-vous que vous disposez des éléments suivants :

  1. Configuration du compte Azure DevOps et de l'organisation : Inscrivez-vous surpour obtenir un compte Azure DevOpsnt si vous n'en avez pas déjà un. Créez une organisation pour gérer vos projets. 
  2. Dépôt : Vous aurez besoin d'un dépôt de code avec un exemple de projet. Il peut être hébergé dans Azure Repos ou GitHub. Pour ce tutoriel, nous utiliserons un simple projet Node.js.
  3. Accès au portail Azure : Vous aurez également besoin d'un accès àe portail Azure lorsque vous voudrez déployer des services Azure comme Azure Kubernetes Service (AKS) et bien d'autres.

Si vous avez besoin de vous familiariser avec l'écosystème Azure au sens large, je vous recommande de suivre le cours " Comprendre Microsoft Azure"

Création d'un nouveau projet et d'un nouveau référentiel

Maintenant que votre compte Azure DevOps et votre organisation sont configurés, créons notre premier projet et notre premier référentiel.

  • Créez un nouveau projet :
    • Connectez-vous à votre compte Azure DevOps.
    • Cliquez sur Nouveau projet, donnez-lui un nom (par exemple, "AzureDevOps-DataCamp-Tutorial") et choisissez la visibilité (publique ou privée).
    • Cliquez sur Créer un projet.

La mise en place d'un nouveau projet dans Azure DevOps est simple :

Saisissez les détails du projet, notamment son nom et une brève description, et définissez sa visibilité (publique ou privée).

Enfin, cliquez sur "Créer le projet" pour commencer.

  • Créez un référentiel :
    • Si vous utilisez Azure Repos, accédez à la sectionRepos et initialisez un nouveau dépôt.
    • Vous pouvez également lier un dépôt GitHub existant en sélectionnant Importer un dépôt.
    • Nommez votre référentiel, choisissez votre type de référentiel (Git ou TFVC), collez l'URL de votre référentiel cloné et cliquez sur Importer.

Le choix d'un système de contrôle de version est essentiel dans Azure Pipelines pour gérer votre code. Voici deux options :

Git : Un système de contrôle de version distribué, moderne et largement utilisé par la communauté des développeurs. C'est le meilleur choix pour la plupart des projets.

TFVC (Team Foundation Version Control) : Un système de contrôle de version centralisé, moins courant et souvent utilisé dans des projets anciens.

Cette présentation intuitive vous aide à choisir le système le mieux adapté aux besoins de votre projet.

  • Si vous utilisez GitHubvous pouvez lier votre compte GitHub à Azure DevOps en allant en bas à gauche de l'interface de votre projet et en sélectionnant Paramètres du projet > Connexions GitHub > Connecter votre compte GitHub.

Illustration montrant comment lier un compte GitHub à Azure DevOps en naviguant vers Project Settings dans le coin inférieur gauche de l'interface.

Ensuite, sélectionnez GitHub Connections.

Enfin, cliquez sur Connecter votre compte GitHub.

Pour ce tutoriel, nous utiliserons Azure Repos comme dépôt de code. Si vous débutez ou si vous n'avez pas de raison particulière de choisir TFVC, je vous conseille de choisir Git.

Créer votre première filière

Il est temps de créer notre premier pipeline. Suivez les étapes ci-dessous :

  • Dans votre Pipelines cliquez sur Créer un pipeline.

Accédez à la section Pipelines de votre projet Azure DevOps :

Ouvrez votre projet Azure DevOps.

Dans le menu de gauche, cliquez sur Pipelines.

Cette section vous permet de gérer efficacement vos pipelines de construction et de mise en production.

Cliquez sur Créer une canalisation pour commencer à mettre en place une nouvelle canalisation.

Cette étape simple vous permet de commencer le processus d'automatisation de vos flux de travail dans Azure DevOps.

  • Sélectionnez Azure Repos Git comme source et choisissez votre dépôt.

Choisissez une source pour votre pipeline :

Sélectionnez Azure Repos Git comme source.

Ensuite, choisissez le dépôt avec lequel vous souhaitez travailler.

Ce processus simple vous permet de connecter le bon dépôt de code à votre pipeline pour une gestion efficace.

  • Vous pouvez configurer votre pipeline à l'aide de l'éditeur YAML ou Classic. Utilisons YAML, une méthode basée sur le code pour définir le pipeline.
  • Enregistrez le pipeline et exécutez-le pour voir si tout fonctionne correctement.

Choisir YAML ou l'éditeur classique

Azure Pipelines propose deux façons de définir vos pipelines :

  • Pipelines YAML : Une façon codée de décrire votre pipeline. Ils sont définis dans un fichier .yaml ou .yml dans votre référentiel de sources, ce qui permet d'obtenir des versions et d'améliorer la collaboration.
  • Éditeur classique : L'éditeur classique est une interface conviviale et visuelle de type "glisser-déposer" qui est moins flexible pour les scénarios complexes.

Aspect

Pipelines YAML

Éditeur classique

Contrôle des versions

Les pipelines YAML prennent en charge le contrôle des versions et sont stockés dans le référentiel du code source.

L'Éditeur classique ne prend pas en charge le contrôle des versions. Il s'agit d'une interface utilisateur graphique (GUI).

Flexibilité

Les pipelines YAML offrent une grande flexibilité.

L'éditeur classique a une flexibilité limitée.

Meilleur pour

Les pipelines YAML conviennent mieux aux flux de travail complexes et à long terme, ainsi qu'à l'automatisation.

L'éditeur classique convient mieux aux installations rapides.

D'après mon expérience, les pipelines YAML offrent une plus grande flexibilité et conviennent mieux aux équipes qui suivent les pratiques de l'infrastructure en tant que code (IaC) sur le site. Mais cet éditeur classique est parfait pour les plus novices qui ont une vision plus visuelle des choses. 

Toutefois, pour des raisons d'évolutivité à long terme, il est recommandé d'utiliser les pipelines YAML plutôt que l'éditeur classique.

Construire avec Azure Pipelines

Voyons maintenant comment nous pouvons construire avec Azure Pipelines. 

Dans cette section, nous allons spécifier les étapes qu'Azure Pipelines suit pour construire votre code, comme l'installation des dépendances, la compilation et l'exécution des tests. Nous allons exprimer ces étapes dans un fichier de configuration dans notre code source en utilisant YAML, un moyen simple et lisible par l'homme de décrire les étapes d'une recette.

Syntaxe du pipeline YAML

Voici un exemple simple de pipeline YAML :

# 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.

Décomposons le code étape par étape :

  • trigger: Spécifie la branche qui déclenche le pipeline (par exemple, main).
  • pool: Définit l'agent de construction (par exemple, ubuntu-latest).
  • steps: Liste les tâches à exécuter, telles que l'installation des dépendances et l'exécution d'un script de construction.

Configuration des étapes de construction

Pour ajouter des étapes de construction à votre pipeline YAML, vous devez définir le "script" dans la section "étapes".

Pour une simple application Node.js, par exemple, notre fichier azure-pipelines.yml ci-dessous contient du code créé automatiquement par Azure DevOps.

# 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'

Jetons un coup d'œil au build steps dans le pipeline YAML ci-dessus : 

  1. Installez Node.js : Utilisez la tâche NodeTool@0 pour spécifier la version de Node.js. 
  2. Installez les dépendances : Exécutez npm install pour installer les dépendances du projet. 
  3. Compiler le code (construire le projet) : Lancez npm run build pour compiler le code. 

Exploitation de la canalisation

Notre pipeline peut être déclenché manuellement ou configuré pour s'exécuter automatiquement lorsque des événements tels que des poussées de branches se produisent.

  • Déclenchement manuel : Cliquez sur Run Pipeline dans l'interface Azure DevOps pour déclencher manuellement le pipeline.

Le bouton Run Pipeline de l'interface Azure DevOps permet de lancer manuellement l'exécution du pipeline.

  • Déclenchement automatique : Mettez en place des déclencheurs basés sur les événements du référentiel pour pousser les changements vers la branche main afin de déclencher automatiquement le pipeline. En voici un exemple :
trigger:
- main

Après avoir exécuté votre pipeline, vous pouvez consulter les journaux et résoudre les problèmes éventuels.

Pour accéder aux journaux, accédez au résumé de l'exécution de votre pipeline et sélectionnez le travail ou la tâche en question. Cela affichera les journaux pour cette étape ; comme dans l'image ci-dessous, vous pouvez choisir n'importe quel travail (Build, Push, ou Update) pour voir les journaux bruts.

Résumé de l'exécution du pipeline montrant les options de travail (Build, Push, Update) pour accéder aux journaux bruts pour chaque étape.

Résumé de l'exécution du pipeline montrant les options de travail (Build, Push, Update) pour accéder aux journaux bruts pour chaque étape.

Pour résoudre les problèmes courants, vous pouvez vérifier que votre pipeline ne présente pas de problèmes courants tels que des dépassements de délai, des contraintes de ressources ou des configurations erronées.

Ajouter des tests à votre pipeline

Vous ajoutez des tests à votre pipeline pour garantir la qualité du code et détecter les problèmes dès le début du développement. Dans Azure Pipelines, vous pouvez intégrer des tests unitaires, d'intégration ou autres en ajoutant des étapes dans la configuration de votre pipeline.

Configuration des étapes du test

Intégrez des étapes de test dans votre pipeline pour garantir la qualité du code. Vous pouvez utiliser des frameworks populaires comme Jest, Mocha ou NUnit. Par exemple, voici comment ajouter des tests unitaires avec Jest :

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

Visualisation des résultats des tests

Azure Pipelines intègre des rapports de test. Vous pouvez configurer la publication des résultats des tests pour un suivi plus simple et consulter les résultats des tests dans les journaux de pipeline. Voici comment :

  • Commencez par naviguer vers Constructions > Résultats des tests.
  • Pour publier les résultats des tests, utilisez la tâche PublishTestResults@2 pour afficher les résultats. Le cursus global s'en trouve facilité. Par exemple :
- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/test-results.xml'
    testRunTitle: 'Unit Tests'

Déploiement avec Azure Pipelines

Dans les étapes de déploiement de votre fichier YAML du pipeline Azure, vous pouvez déployer automatiquement votre application dans plusieurs environnements, tels que testing, staging et production. Dans cette section, nous allons passer en revue quelques méthodes de déploiement avec Azure Pipelines.

Déploiement vers Azure Web Apps

Azure Web Apps est un service du portail Azure qui vous permet de développer, de déployer et de gérer des applications web à grande échelle. 

Pour déployer vers Azure Web Apps, vous devez relier les deux services. Voici comment procéder :

  • En bas à gauche de votre projet, cliquez sur Paramètres du projet et cliquez sur Connexions de service sous la rubrique Pipelines sous la section Pipelines.

L'interface Azure DevOps montre l'option Project Settings dans le coin inférieur gauche pour lier les services Azure.

Naviguez jusqu'à la section Pipelines :

Cliquez sur Service Connections dans la section Pipelines.

Cette étape vous permet de vous connecter aux services Azure, ce qui améliore les capacités et les intégrations de votre projet.

  • Cliquez ici Nouvelle connexion de service et choisissez Azure Resource Manager.

Établir une nouvelle connexion de service :

Cliquez sur Nouvelle connexion de service.

Ce processus simple vous permet de vous connecter aux ressources Azure et d'améliorer les capacités de votre projet.

Établir une nouvelle connexion de service :

Choisissez Azure Resource Manager.

Ce processus simple vous aide à vous connecter aux ressources Azure, améliorant ainsi les capacités de votre projet.

  • Authentifiez-vous avec votre compte Azure.
  • Déployez vers Azure App Service :
    • Retournez dans vos Pipelines et configurez votre pipeline.
    • Dans votre pipeline, ajoutez une tâche de déploiement vers Azure.
    • Spécifiez le groupe de ressources et les détails du service. 

Voici un exemple de pipeline de déploiement YAML pour une simple application Node.js vers 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)'

Décomposons le code ci-dessus, afin que vous puissiez l'adapter à votre cas d'utilisation :

  • Remplacez your-azure-subscription par le nom de la connexion de service qui donne accès à votre abonnement Azure.
  • Remplacez your-app-name par le nom réel de votre application web dans Azure. 
  • Remplacez $(Build.ArtifactStagingDirectory) par le répertoire où placer le paquetage ou les fichiers de l'application web pour le déploiement. $(Build.ArtifactStagingDirectory) - Cette variable pointe vers le dossier où se trouvent vos artefacts de construction (vos fichiers d'application) une fois qu'ils ont été construits.

Mise en place du déploiement continu (CD)

Une fois que tout notre code a passé tous les tests et vérifications, l'étape suivante consiste à mettre en place notre déploiement continu. Suivez les étapes décrites ci-dessous.

Modèle de pipeline de mise en production Azure montrant les sources d'artefacts alimentant le pipeline de mise en production pour le déploiement.

Modèle de déploiement du pipeline de diffusion Azure (Source : Microsoft)

  • Créez un pipeline de diffusion :
    • Aller à Pipelines > Communiqués et cliquez sur Nouveau pipeline.

L'interface Azure DevOps montre le chemin à suivre pour créer un pipeline de diffusion en naviguant vers Pipelines > Releases et en sélectionnant New Pipeline.

La création d'un pipeline de publication dans Azure DevOps est simple :

Accédez à la section Pipelines dans le menu de gauche.

Cliquez sur Releases.

Sélectionnez ensuite Nouvelle canalisation pour commencer à mettre en place votre processus de diffusion.

Cette interface conviviale vous permet de gérer et d'automatiser efficacement vos flux de production.

  • Sélectionnez l'option Déploiement Azure App Service .

Interface Azure DevOps montrant l'option de sélection du modèle Azure App Service Deployment pour la configuration du pipeline de diffusion.

  • Configurer les environnements :
    • Ajouter et configurer Dev, Staging, QAet production où vous souhaitez déployer votre application.

Interface Azure DevOps montrant les environnements configurés comme Dev, Staging, QA et Production pour le déploiement d'applications.

  • Liez l'artefact de votre pipeline de construction comme source pour le pipeline de diffusion en sélectionnant Ajouter un artefact.

Interface Azure DevOps montrant l'option d'ajouter un artefact du pipeline de construction comme source pour la configuration du pipeline de diffusion.

  • Configurez les approbations et les barrières :
    • Il est nécessaire de mettre en place des approbations préalables au déploiement pour les environnements sensibles, tels que les environnements de production. Par exemple, un chef d'équipe peut être tenu d'approuver la version. Vous pouvez également ajouter des points de contrôle tels que des tests automatisés ou des contrôles de surveillance pour vous assurer que le déploiement respecte les normes de qualité.

D'après mon expérience, cette phase est nécessaire pour maintenir la stabilité dans des environnements de développement exigeants. Les approbations et les barrières assurent le contrôle et garantissent que seul un code de haute qualité est mis en production.

Déploiement vers Kubernetes

Kubernetes facilite l'exécution d'applications conteneurisées fiables et évolutives. En utilisant Azure Kubernetes Service (AKS), vous bénéficiez d'un environnement géré qui simplifie le déploiement et les opérations. Dans cette section, je vais vous expliquer comment déployer votre application sur AKS à l'aide d'Azure Pipelines.

Préparez votre cluster AKS

Vous pouvez créer un cluster AKS à l'aide du portail Azure ou de la CLI. Voici une commande de base de l'interface Bash CLI pour provisionner un cluster :

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

Décortiquons la commande ci-dessus :

  • --resource-group: Ceci indique le groupe de ressources Azure dans lequel le cluster AKS sera créé.
  • --name: Il s'agit du nom de votre cluster AKS.
  • --node-count: Ce paramètre définit le nombre de nœuds dans la grappe (par exemple, 3 dans cet exemple).
  • --enable-addons monitoring: Cela rend possible la surveillance et l'analyse avec Azure Monitor for Containers.
  • --generate-ssh-keys: Cette option génère automatiquement des clés SSH pour un accès sécurisé au nœud si elles ne sont pas fournies.

N'oubliez pas de remplacer et par les noms de vos groupes de ressources et de vos clusters.

Kubectl doit être configuré après la mise en place de votre cluster AKS. Cela garantit que votre agent de pipeline ou votre ordinateur local peut utiliser kubectl pour communiquer avec le cluster.

Vous pouvez accélérer vos tâches Azure à l'aide de la ligne de commande pourols - cet aide-mémoire sur la ligne de commande Azure est une référence pratique.

Créez un fichier YAML de déploiement 

Prenons l'exemple d'un fichier YAML de déploiement de base pour déployer une image Docker sur 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.

Déployer à l'aide d'Azure Pipelines

Dans votre pipeline YAML, incluez une tâche de déploiement vers AKS.

# 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

Commencer et pousser le fichier YAML pour déclencher le déploiement.

AKS simplifie l'orchestration des conteneurs, ce qui facilite la gestion de la mise à l'échelle, des mises à jour et des retours en arrière. D'après mon expérience, c'est un must-have pour les applications cloud-natives modernes.

Obtenez la certification Azure AZ-900

Préparez-vous à l'examen PL-300 d'Azure et bénéficiez d'une remise de 50% sur le prix de l'examen.
Certifiez vos compétences Azure

Optimiser et surveiller vos pipelines

Au début de ma carrière, la construction de pipelines n'était pas le plus grand défi - c'était le fait d'avoir un pipeline rapide et fiable qui l'était. Un pipeline bien optimisé ne se contente pas de rendre les constructions plus rapides ; il réduit également la frustration des équipes, diminue les risques de déploiement et accélère la livraison. 

Je vais partager avec vous quelques conseils et stratégies que vous pouvez utiliser pour que vos pipelines Azure DevOps soient rapides, organisés et fiables.

Mise en cache du pipeline

L'installation des dépendances est un autre goulot d'étranglement courant dans les pipelines. Que vous travailliez avec npm, .NET ou d'autres gestionnaires de paquets, le téléchargement répété des mêmes dépendances peut vous faire perdre beaucoup de temps. La mise en cache des dépendances et des artefacts entre les exécutions réduit considérablement le temps d'exécution. 

Voici comment mettre en cache les dépendances dans Azure Pipelines.

Tout d'abord, vous devez identifier les gestionnaires de paquets, tels que :

  • Node.js (node_modules)
  • Paquets NuGet
  • Python (pip packages)
  • Dépendances Maven/Gradle

Azure Pipelines prend en charge les mécanismes de mise en cache, tels que la tâche Cache@2, qui vous permet de mettre en cache les dépendances entre les exécutions du pipeline. 

Prenons l'exemple d'une simple mise en cache pour Node.js :

# 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'

Vous pouvez alors ignorer l'installation en cas de mise en cache. Il s'agit d'une vérification judicieuse avant de terminer l'installation de npm. Il s'agit d'une logique efficace basée sur des conditions.

Prenons un exemple simple ci-dessous :

# 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.

Cet exemple de mise en cache simple pour une application Node.js enregistre le répertoire de cache npm en utilisant package-lock.json comme clé. Lorsque vos dépendances ne changent pas, il les restaure, ce qui permet de gagner quelques minutes à chaque compilation. 

J'ai constaté que la mise en cache réduisait considérablement le temps de construction, en particulier dans les grands projets, mais uniquement si les clés de cache sont choisies avec soin. Dans l'un de mes anciens projets, cela a permis de réduire le temps de construction d'une application Node.js de 55 %.

Contrôler l'état des pipelines

La réussite d'un pipeline ne se résume pas à des coches vertes, à la visibilité et à un retour d'information rapide. Lorsque quelque chose se casse, vous voulez que votre équipe le sache immédiatement. Voici comment garder une longueur d'avance sur les problèmes.

Comment mettre en place des tableaux de bord Azure DevOps ?

Azure DevOps fournit des widgets intégrés pour afficher l'état des pipelines, les exécutions récentes, les taux d'échec et les durées moyennes. 

  • Tout d'abord, vous naviguez vers Tableaux de bord sous votre projet.

Interface Azure DevOps montrant la section Tableaux de bord avec des widgets intégrés pour l'état des pipelines, les exécutions récentes, les taux d'échec et les durées moyennes.

  • Cliquez ensuite sur Nouveau tableau de bord ou utilisez un tableau de bord existant.

L'interface Azure DevOps montre l'option de créer un nouveau tableau de bord ou de sélectionner un tableau de bord existant dans la section Tableaux de bord.

  • Vous pouvez ajouter des widgets tels que : Histoire de la construction, Aperçu de la chaîne de production, Résultats des testset bien d'autres choses encore.

Interface Azure DevOps montrant des options pour ajouter des widgets tels que Build History, Release Pipeline Overview, et Test Results Trend.

Elles sont essentielles pour le cursus des réussites et des échecs, pour déterminer les environnements qui posent problème, etc.

Configuration des alertes pour les pipelines qui ont échoué

  • En bas à gauche de votre projet, cliquez sur Paramètres du projet.

Interface Azure DevOps montrant l'option Project Settings dans le coin inférieur gauche pour configurer les alertes en cas d'échec des pipelines.

  • Cliquez Notifications.

Interface Azure DevOps montrant l'option Notifications pour configurer les alertes de pipeline.

  • Cliquez ensuite sur Nouvel abonnement.

L'interface Azure DevOps montre l'option de création d'un nouvel abonnement pour les notifications dans la section Notifications.

Prenons un scénario : Dans la section Category, sélectionnez Build ; dans la section Template, sélectionnez "A build fails", puis cliquez sur Next.

Vous avez une interface comme celle-ci :

"L'interface Azure DevOps affiche la section Category avec 'Build' sélectionné, et la section Template avec 'A build fails' choisi pour la création d'un abonnement de notification.

  • Enfin, cliquez sur Cliquez sur Terminer.
  • Dans la section Notifications vous pouvez consulter la section Construire pour le message "Échec de la construction"que nous avons créé précédemment.

Interface Azure DevOps montrant la section Notifications avec la description de la construction pour la notification "A build fails" créée précédemment.

Il m'est arrivé de rater un déploiement critique parce que des alertes n'avaient pas été mises en place. Depuis lors, j'ai toujours mis en place et configuré des alertes d'équipe pour chaque déploiement de production. De cette façon, je ne manque jamais une version défectueuse ou un retard dans mon cycle de publication.

Analyse de la performance des pipelines

Nous savons que même si votre pipeline fonctionne, il peut être lent, et les pipelines lents tuent la productivité. L'identification précoce des goulets d'étranglement permet donc d'éviter des problèmes ultérieurs.

Les mesures du pipeline permettent d'évaluer les performances des constructions et des déploiements. Voici comment y accéder. 

Tout d'abord, vous devez activer Vues analytiques dans les paramètres du projet et vous connecter à Power BI ou explorer via les graphiques intégrés.

Contrôler l'état des pipelines

  • Sous les Pipelines allez dans la section Analyses.
  • Consultez des indicateurs tels que le taux de réussite du pipeline, le taux de réussite des tests et la durée du pipeline.

Contrôler l'état des pipelines :

Accédez à Pipelines, puis sélectionnez Analyses.

Affichez des mesures importantes telles que le taux de réussite du pipeline, le taux de réussite des tests et la durée du pipeline.

Cette fonctionnalité vous aide à suivre les performances de votre pipeline et à vous assurer que tout se passe bien.

Voyons plus en détail quelles sont les mesures clés que nous pouvons surveiller dans le cadre de l'analyse et pourquoi elles sont importantes :

Métrique

Pourquoi c'est important

Tendances de la durée de construction

Cela permet de repérer facilement les ralentissements au fil du temps.

Taux d'échec par branche

Cela permet d'identifier les caractéristiques instables.

Temps dans la file d'attente

Cela permet de détecter les pénuries d'agents.

Il y a quelques mois, j'ai travaillé sur le pipeline d'un client, etce qui m'a le plus frappé, c'est le temps passé dans la file d'attente. J'ai découvert un jour que mon équipe et moi-même avions surchargé un pool d'agents auto-hébergés, et que 40 % du temps de notre pipeline était consacré à l'attente d'un coureur disponible. Personne ne l'a vu venir jusqu'à ce que les analyses le rendent évident.

Nous pourrions y remédier en ajoutant deux agents auto-hébergés supplémentaires et en répartissant la charge par type de travail. Les résultats ont été immédiats : la durée moyenne de construction du pipeline a diminué d'environ 35 %.

Contrôle à l'aide de journaux

Ainsi, au-delà des mesures, les journaux de la ligne de temps sont précieux, en particulier pour les tâches de longue haleine. Au fil des ans, j'ai pris l'habitude d'ajouter des marqueurs de journal personnalisés à l'intérieur des étapes critiques des scripts afin de repérer les retards exacts.

Prenons un exemple simple :

# 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.

Obtenez la certification Azure AZ-900

Préparez-vous à l'examen PL-300 d'Azure et bénéficiez d'une remise de 50% sur le prix de l'examen.

Meilleures pratiques pour Azure Pipelines

Maintenant que nous avons abordé les services de base d'Azure Pipelines et bien d'autres encore, voyons comment en tirer le meilleur parti en suivant ces bonnes pratiques. 

Passons de la performance à la structure, car un pipeline rapide et difficile à maintenir nuira toujours à une équipe.

Organiser des pipelines pour les équipes

Lorsque plusieurs équipes ou environnements partagent des pipelines, les choses deviennent souvent compliquées. Vous avez besoin d'une structure. Un seul pipeline géant pour les environnements de développement, d'essai et de production conduit au chaos. 

Pour organiser votre pipeline, vous devez le séparer en environnements. Examinons une structure simpleci-dessous. 

Environnement

Nom du pipeline

Déclencheur

Développement

dev.yml

Branches de fonctionnalités (s'exécute à chaque livraison)

Mise en scène

staging.yml

Pull requests → Staging (Manual trigger)

Production

prod.yml

Canalisations manuelles ou à déclenchement (Approbation requise)

Les éléments clés à comprendre à partir de cettestructure simple :

  • Chaque fichier s'appuie sur des modèles partagés.
  • Chaque fichier utilise des variables spécifiques à l'environnement.
  • Chaque fichier contrôle l'accès par le biais de permissions de pipeline.

Par expérience, cette séparation facilite le débogage et permet aux développeurs débutants de se déployer dans l'environnement de développement sans risquer l'environnement de production.

Utiliser des modèles et du code réutilisable

DevOps consiste à réduire les flux de travail manuels et à améliorer l'automatisation du processus de développement de logiciels. 

Le code YAML est sujet aux erreurs lorsqu'il est copié et collé d'un projet à l'autre. Azure DevOps propose des modèles de pipelines pour une configuration DRY (Don't Repeat Yourself) via des pipelines YAML. Vous pouvez réutiliser les modèles de pipeline YAML dans plusieurs projets, concevoir vos pipelines de manière cohérente et même réduire le temps de traitement des pipelines.

Prenons l'exemple d'un simple modèle de construction réutilisable.

Tout d'abord, définissez votre modèle de construction, 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.

Utilisez votre modèle de construction dans votre pipeline principal :

# 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.

Gestion des secrets et des variables

Lorsque vous travaillez sur des projets, en particulier dans des environnements collaboratifs, il est courant d'utiliser des informations sensibles telles que des chaînes de connexion à des bases de données, des clés API, des mots de passe ou des jetons. Si ces secrets sont codés en dur dans votre base de code ou exposés dans des journaux, ils peuvent être facilement compromis.

Voyons comment gérer en toute sécurité nos secrets et nos variables à l'aide des groupes de secrets et de variables d'Azure Pipelines.

Étape 1 : Création d'un groupe de variables

  • Cliquez sur l'onglet Pipelines dans la barre latérale gauche.
  • Dans la section Pipelines, cliquez sur Bibliothèque.

Interface Azure DevOps montrant l'onglet Pipelines dans la barre latérale gauche et l'option Bibliothèque dans la section Pipelines.

  • Créez un groupe de variables :
    • Cliquez sur les Groupes de variables cliquez sur l'onglet Groupes de variables.

Créez facilement un nouveau groupe de variables :

Dans Azure DevOps, naviguez vers Pipelines, puis sélectionnez Library.

Créez un nouveau groupe de variables.

Cette étape vous aide à gérer et à organiser vos variables pour des configurations de pipeline efficaces.

  • Cliquez sur le bouton Ajouter un groupe de variables bouton.
  • Saisissez un nom pour votre groupe de variables (par exemple, MyAppSecrets).

Interface Azure DevOps montrant le bouton Ajouter un groupe de variables et un champ pour saisir le nom du groupe de variables, par exemple MyAppSecrets.

Étape 2 : Ajouter des secrets au groupe de variables

  • Ajoutez des variables : 
    • Dans le groupe des variables, cliquez sur Ajouter pour créer une nouvelle variable.

L'interface Azure DevOps montre la possibilité d'ajouter des variables dans un groupe de variables en cliquant sur le bouton Ajouter.

  • Saisissez le nom de la variable (par exemple, DB_CONNECTION_STRING).
  • Cochez la case intitulée Garder cette valeur secrète pour qu'elle soit traitée comme un secret.
  • Saisissez la valeur de la variable (par exemple, la chaîne de connexion à ma base de données).

Interface Azure DevOps montrant les champs permettant de saisir un nom de variable (par exemple, DB_CONNECTION_STRING), de la marquer comme secrète et de définir sa valeur (par exemple, chaîne de connexion à la base de données).

  • Cliquez sur Sauvegarder pour enregistrer la variable.

Interface Azure DevOps montrant le bouton Save utilisé pour stocker la variable nouvellement ajoutée dans le groupe de variables.

Étape 3 : Utiliser des secrets dans votre pipeline

Maintenant que vous avez créé un groupe de variables avec des secrets, vous pouvez utiliser ces variables dans le fichier YAML de votre pipeline.

  • Référencez le groupe de variables : Ajoutez le groupe de variables au fichier YAML de votre pipeline : 
variables:
- group: MyAppSecrets
  • Utilisez les secrets dans vos démarches : Vous pouvez faire référence aux secrets dans les étapes de votre pipeline en utilisant la syntaxe $(VariableName). Voici un exemple d'utilisation de DB_CONNECTION_STRING dans une action de script :
# 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.

Étape 4 : Exploitation de la canalisation

  • Une fois que vous avez sauvegardé votre fichier YAML, allez dans la section Pipelines et cliquez sur Exécuter le pipeline.
  • Après l'exécution du pipeline, vous pouvez consulter vos journaux. Vous remarquerez que la valeur secrète est cachée, ce qui permet de protéger vos informations sensibles.

Conclusion

Dans ce tutoriel, nous avons parcouru l'ensemble du parcours d'utilisation d'Azure Pipelines, de la configuration de votre premier pipeline à sa construction, son test, son déploiement, sa surveillance et son optimisation.

La phase de déploiement nécessite de la pratique. Commencez simplement, continuez à vous améliorer et, avec le temps, vous gagnerez en confiance et en aisance dans la gestion des flux de travail CI/CD. Azure Pipelines vous fournit les outils, vous apportez l'itération et l'apprentissage.

Grâce à des efforts constants, vous pouvez rationaliser votre processus de développement et devenir confiant dans la livraison de logiciels de haute qualité à grande échelle.

Pour en savoir plus sur Azure DevOps et Microsoft Azure, consultezles ressources suivantes : 

FAQ

Puis-je utiliser Azure Pipelines pour des projets non-Azure ?

Oui, vous pouvez le faire. Azure Pipelines prend en charge les déploiements sur site et dans divers environnements cloud comme AWS, GCP et bien d'autres.

Quels sont les langages de programmation pris en charge par Azure Pipelines ?

Azure Pipelines prend en charge de nombreux langages de programmation, notamment Node.js, Python, Java, .NET, et bien d'autres encore.

Quelle est la différence entre Azure Pipelines et GitHub Actions ?

Azure Pipelines offre une intégration plus poussée avec l'écosystème Azure et des outils de déploiement robustes, tandis que GitHub Actions offre une expérience CI/CD plus simple et native de GitHub. Tous deux prennent en charge les flux de travail YAML et les déploiements en conteneur.

Puis-je utiliser Azure Pipelines avec des technologies non Microsoft comme Python ou Java ?

Oui, Azure Pipelines prend en charge toutes les principales plateformes et tous les principaux langages, notamment Python, Java, Node.js, etc. Vous pouvez configurer les constructions et les déploiements pour n'importe quelle pile technologique à l'aide de YAML.

L'utilisation d'Azure Pipelines est-elle gratuite ?

Azure Pipelines propose un niveau gratuit avec 1 800 minutes/mois pour les projets publics et un temps de construction privé limité. Toute utilisation supplémentaire nécessite un plan payant ou des agents auto-hébergés.

Qu'est-ce que les connexions de service Azure DevOps et pourquoi sont-elles importantes ?

Les connexions de service relient en toute sécurité Azure Pipelines à des services externes tels que Azure Web Apps ou des clusters Kubernetes. Ils sont essentiels pour les déploiements automatisés et la gestion de l'infrastructure.

Comment Azure Pipelines se compare-t-il à Jenkins ou CircleCI ?

Azure Pipelines offre une expérience plus intégrée aux utilisateurs d'Azure et une meilleure prise en charge des services Microsoft. Jenkins est plus personnalisable mais nécessite plus d'installation ; CircleCI excelle en termes de vitesse et de parallélisme.


Emmanuel Akor's photo
Author
Emmanuel Akor
LinkedIn
Twitter

Emmanuel Akor est un ingénieur Cloud et DevOps compétent dans l'exploitation des technologies Cloud et des outils DevOps pour mener des projets impactants. Diplômé en informatique de première classe de l'Université Babcock et ancien co-responsable du cloud pour le GDSC, Emmanuel allie l'excellence académique à l'expérience pratique. En tant que rédacteur de contenu technique, il excelle dans le partage des connaissances et la collaboration avec les équipes.

Sujets

Apprenez-en plus sur Azure avec ces cours !

Cours

Understanding Microsoft Azure

3 h
34.2K
Learn about the power of Microsoft Azure and cloud computing software to help you improve your data engineering skills.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow