Guide de démarrage rapide : générer une image conteneur pour déployer des applications à l’aide d’Azure Pipelines

Azure DevOps Services

Ce guide de démarrage rapide montre comment créer une image conteneur pour le déploiement d’applications à l’aide d’Azure Pipelines. Pour générer cette image, tout ce dont vous avez besoin est un fichier Dockerfile dans votre référentiel. Vous pouvez générer des conteneurs Linux ou Windows, en fonction de l’agent que vous utilisez dans votre pipeline.

Prérequis

Dupliquer (fork) l’exemple de référentiel

Dans votre navigateur, accédez à l’exemple de référentiel suivant et dupliquez-le dans votre compte GitHub.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Générer une image Linux ou Windows

  1. Connectez-vous à votre organisation Azure DevOps, et accédez à votre projet.

  2. Accédez à Pipelines, puis sélectionnez Nouveau pipeline ou Créer un pipeline si vous créez le premier pipeline du projet.

  3. Sélectionnez GitHub comme emplacement de votre code source.

  4. Sélectionnez votre référentiel, puis sélectionnez Pipeline de démarrage.

    • Si vous êtes redirigé vers GitHub pour vous connecter, entrez vos informations d’identification GitHub.
    • Si vous êtes redirigé vers GitHub pour installer l’application Azure Pipelines, sélectionnez Approuver et installer.
  5. Remplacez le contenu du fichier azure-pipelines.yml par le code suivant. Selon que vous déployez une application Linux ou Windows, veillez à définir vmImage respectivement sur ubuntu-latest ou windows-latest.

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. Lorsque vous avez terminé, sélectionnez Enregistrer et exécuter.

  7. Lorsque vous ajoutez le fichier azure-pipelines.yml à votre référentiel, vous êtes invité à ajouter un message de validation. Entrez un message, puis sélectionnez Enregistrer et exécuter.

Lorsque vous utilisez des agents auto-hébergés, assurez-vous que Docker est installé sur l’hôte de l’agent et que le moteur/démon Docker s’exécute avec des privilèges élevés.

Pour générer l’image, Docker doit être installé sur l’hôte de l’agent et le moteur/démon Docker doit s’exécuter avec des privilèges élevés. Procédez comme suit pour créer votre pipeline à l’aide de l’éditeur de pipeline YAML.

  1. Accédez à votre collection et créez un projet.
  2. Dans votre projet, sélectionnez Pipelines.
  3. Sélectionnez Créer un pipeline.
  4. Sélectionnez GitHub Enterprise Server comme emplacement de votre code source.
  5. Si ce n’est déjà fait, autorisez Azure Pipelines à se connecter à votre compte GitHub Enterprise Server.
    1. Sélectionnez Se connecter à GitHub Enterprise Server.
    2. Entrez les détails de votre compte, puis sélectionnez Vérifier et enregistrer.
  6. Sélectionnez votre dépôt. Si vous êtes redirigé vers GitHub pour installer l’application Azure Pipelines, sélectionnez Approuver et installer.
  7. Pour configurer votre pipeline, sélectionnez le modèle Générer une image Docker.
  8. Dans l’éditeur de pipelines YAML, remplacez le contenu du fichier YAML par le code suivant. Remplacez le nom du pool par le nom du pool qui contient votre agent auto-hébergé avec la fonctionnalité Docker.
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. Sélectionnez Enregistrer et exécuter.
  2. Sur la page Enregistrer et exécuter, sélectionnez une nouvelle fois Enregistrer et exécuter.

Pour plus d’informations sur la création d’images Docker, consultez la tâche Docker utilisée par cet exemple d’application. Vous pouvez également appeler directement des commandes Docker à l’aide d’une tâche de ligne de commande.

Les images conteneur sont générées et stockées sur l’agent. Vous pouvez envoyer votre image vers Google Container Registry, Docker Hub ou Azure Container Registry. Pour plus d’informations, consultez Envoyer (push) une image vers Docker Hub ou Google Container Registry ou Envoyer (push) une image vers Azure Container Registry.

Nettoyer les ressources

Si vous ne prévoyez pas de continuer à utiliser cette application, supprimez votre pipeline et votre référentiel de code.

Questions fréquentes (FAQ)

Quels agents puis-je utiliser pour créer des images conteneur ?

  • Vous pouvez créer des images conteneur Linux à l’aide d’agents Ubuntu hébergés par Microsoft ou d’agents auto-hébergés sur la plateforme Linux.

  • Vous pouvez créer des images conteneur Windows à l’aide d’agents Windows hébergés par Microsoft ou d’agents auto-hébergés sur la plateforme Windows. Tous les agents basés sur la plateforme Windows hébergés par Microsoft sont fournis avec le moteur Moby et le client nécessaires pour les builds Docker.

  • Actuellement, vous ne pouvez pas utiliser les agents macOS hébergés par Microsoft pour créer des images conteneur, car le moteur Moby nécessaire à la génération des images n’est pas préinstallé sur ces agents.

Pour plus d’informations, consultez les options d’agent Windows et Linux disponibles avec les agents hébergés par Microsoft.

Quelles images Docker préalablement mises en cache sont disponibles sur les agents hébergés ?

Pour éviter de passer trop de temps à extraire des images Docker pour chaque tâche à partir du registre de conteneurs, certaines images couramment utilisées sont préalablement mises en cache sur des agents hébergés par Microsoft. Pour obtenir la liste des images préalablement mises en cache disponibles, consultez les Logiciels inclus pour les images de machine virtuelle disponibles dans le référentiel azure-pipelines-image-generation.

Comment faire pour définir la variable BuildKit pour mes builds Docker ?

BuildKit introduit des améliorations de build autour des performances, de la gestion du stockage, du fonctionnement des fonctionnalités et de la sécurité. BuildKit n’est actuellement pas pris en charge sur les hôtes Windows.

Pour activer les builds Docker à l’aide de BuildKit, définissez la variable DOCKER_BUILDKIT.

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

Comment utiliser un agent auto-hébergé ?

Docker doit être installé et le moteur/démon doit s’exécuter sur l’hôte de l’agent. Si Docker n’est pas installé sur l’hôte de l’agent, vous pouvez ajouter la tâche du programme d’installation de Docker à votre pipeline. Vous devez ajouter la tâche du programme d’installation de Docker avant la tâche Docker.

Comment créer une build Docker basée sur un script au lieu d’utiliser la tâche Docker ?

Vous pouvez utiliser la commande build ou toute autre commande Docker.

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

Cette commande crée une image équivalente à une image générée avec la tâche Docker. En interne, la tâche Docker appelle le fichier binaire Docker sur un script et réunit quelques commandes supplémentaires pour offrir quelques avantages supplémentaires. En savoir plus sur la tâche Docker.

Puis-je réutiliser la mise en cache de calque pendant les builds sur Azure Pipelines ?

Si vous utilisez des agents hébergés par Microsoft, chaque tâche est distribuée à une machine virtuelle nouvellement provisionnée, en fonction de l’image générée à partir des modèles du référentiel azure-pipelines-image-generation. Ces machines virtuelles sont nettoyées une fois le travail terminé. Cette durée de vie éphémère empêche la réutilisation de ces machines virtuelles pour les travaux suivants et la réutilisation des calques Docker mis en cache. Pour contourner ce problème, vous pouvez configurer une build à plusieurs index qui produit deux images et les envoie (push) à un registre d’images à un stade précoce. Vous pouvez ensuite indiquer à Docker d’utiliser ces images comme source de cache avec l’argument --cache-from.

Si vous utilisez des agents autohébergés, vous pouvez mettre en cache des calques Docker sans solution de contournement, car le problème de durée de vie éphémère ne s’applique pas à ces agents.

Comment faire créer des images conteneur Linux pour des architectures autres que x64 ?

Lorsque vous utilisez des agents Linux hébergés par Microsoft, vous créez des images conteneur Linux pour l’architecture x64. Pour créer des images pour d’autres architectures, telles que le processeur x86 ou ARM, vous pouvez utiliser un émulateur de machine tel que QEMU.

Les étapes suivantes montrent comment créer une image conteneur de processeur ARM à l’aide de QEMU :

  1. Créez votre fichier Dockerfile avec une image de base qui correspond à l’architecture cible :

    FROM arm64v8/alpine:latest
    
  2. Exécutez le script suivant dans votre travail avant de générer l’image :

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

Pour plus d’informations, consultez qemu-user-static sur GitHub.

Comment faire pour exécuter des tests et publier des résultats de test pour les applications conteneurisées ?

Pour obtenir différentes options sur le test d’applications conteneurisées et la publication des résultats de test qui en découlent, consultez la tâche de publication des résultats des tests.

Étapes suivantes

Après avoir généré votre image conteneur, envoyez l’image à Azure Container Registry, Docker Hub ou Google Container Registry. Pour savoir comment envoyer une image à un registre de conteneurs, passez à l’un des articles suivants :