Partager via


Utiliser Azure Pipelines pour générer et envoyer (push) des images conteneur aux registres

Azure DevOps Services

Cet article vous guide tout au long de la création d’un pipeline pour générer et envoyer (push) une image Docker vers azure Container Registry ou Docker Hub.

Prérequis

Produit Exigences
Azure DevOps - Un projet Azure DevOps.
- Autorisations :
    - Pour accorder l’accès à tous les pipelines du projet : vous devez être membre du Project Administrators group.
    - Pour créer des connexions de service : vous devez disposer du rôle Administrator ou Creator pour service connections.
- Si vous utilisez un agent auto-hébergé, assurez-vous que Docker est installé et que le moteur Docker fonctionne avec des privilèges élevés. Les agents hébergés par Microsoft ont Préinstallé Docker.
GitHub - Un compte GitHub.
- Un référentiel GitHub contenant un Dockerfile. Utilisez l’exemple de référentiel si vous n’avez pas votre propre projet.
- Une connexion de service GitHub pour autoriser Azure Pipelines.
Azure - Un abonnement Azure
- Un Azure Container Registry.
Produit Exigences
Azure DevOps - Un projet Azure DevOps.
- Autorisations :
    - Pour accorder l’accès à tous les pipelines du projet : vous devez être membre du Project Administrators group.
    - Pour créer des connexions de service : vous devez disposer du rôle Administrator ou Creator pour service connections.
- Si vous utilisez un agent auto-hébergé, assurez-vous que Docker est installé et que le moteur Docker fonctionne avec des privilèges élevés. Les agents hébergés par Microsoft ont Préinstallé Docker.
GitHub - Un compte GitHub.
- Un référentiel GitHub contenant un Dockerfile. Utilisez l’exemple de référentiel si vous n’avez pas votre propre projet.
- Une connexion de service GitHub pour autoriser Azure Pipelines.
Docker Hub - Un compte Docker Hub.
- Un référentiel d'image Docker Hub .

Créer une connexion de service de Registre Docker

Avant d’envoyer (push) des images conteneur à un registre, vous devez créer une connexion de service dans Azure DevOps. Cette connexion de service stocke les informations d’identification requises pour s’authentifier en toute sécurité auprès du registre de conteneurs. Pour plus d’informations, veuillez consulter la section connexions de service Docker Registry.

  1. Dans votre projet Azure DevOps, sélectionnez paramètres de projet>connexions de service.

    Capture d’écran de la sélection des paramètres du projet.

  2. Sélectionnez nouvelle connexion de service et Registre Docker.

    Capture d’écran de la sélection du Registre Docker.

  3. Sélectionnez Docker Hub et entrez les informations suivantes :

    Champ Description
    Docker ID Entrez votre ID Docker.
    Mot de passe Docker Entrez votre mot de passe Docker.
    nom de connexion de service Entrez un nom pour la connexion de service.
    Accorder l’autorisation d’accès à tous les pipelines Sélectionnez cette option pour accorder l’accès à tous les pipelines.

    capture d’écran de la boîte de dialogue de connexion de service Docker Hub.

  4. Sélectionnez Vérifier et enregistrer.

Créer un pipeline pour générer et envoyer (push) une image Docker

La tâche Docker@2 est utilisée pour générer et envoyer (push) l’image au registre de conteneurs. La tâche Docker@2 est conçue pour simplifier le processus de génération, d’envoi (push) et de gestion des images Docker au sein de vos pipelines Azure. Cette tâche prend en charge un large éventail de commandes Docker, notamment la génération, l’envoi (push), la connexion, la déconnexion, le démarrage, l’arrêt et l’exécution.

Procédez comme ceci pour créer un pipeline YAML qui utilise la tâche Docker@2 afin de générer l’image et de la transférer.

  1. Dans votre projet Azure DevOps, sélectionnez Pipelines puis New pipeline.

  2. Sélectionnez GitHub comme emplacement pour votre code source et sélectionnez votre référentiel.

    • 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.
  3. Sélectionnez votre dépôt.

  4. Sélectionnez le modèle de pipeline Starter pour créer une configuration de pipeline de base.

  5. Remplacez le contenu de azure-pipelines.yml par le code suivant :

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      repositoryName: '<target repository name>' 
    
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: '<docker registry service connection>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  6. Modifiez le fichier YAML du pipeline comme suit :

    • Remplacez <target repository name> par le nom du référentiel dans le registre de conteneurs dans lequel vous souhaitez envoyer (push) l’image.
    • Remplacez <docker registry service connection> par le nom de la connexion de service du registre Docker que vous avez créée précédemment.
  7. Lorsque vous avez terminé, sélectionnez Enregistrer et exécuter>Enregistrer et exécuter.

  8. Sélectionnez Job pour afficher les journaux et vérifier que le pipeline s’est exécuté avec succès.

  1. Rendez-vous dans votre projet Azure DevOps et sélectionnez Pipelines dans le menu de gauche.

  2. Sélectionnez Nouveau pipeline.

  3. Sélectionnez GitHub comme emplacement pour votre code source et sélectionnez votre référentiel.

    • 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.
  4. Sélectionnez le modèle Docker - Construire et envoyer une image à Azure Container Registry.

  5. Sélectionnez votre abonnement Azure et Continue.

  6. Sélectionnez votre Container Registry, puis sélectionnez Validate and configure.

    Exemple de pipeline YAML :

    # Docker
    # Build and push an image to Azure Container Registry
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: '7f9dc28e-5551-43ee-891f-33bf61a995de'
      imageRepository: 'usernamepipelinesjavascriptdocker'
      containerRegistry: 'repoistoryname.azurecr.io'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
      displayName: Build and push stage
      jobs:
      - job: Build
        displayName: Build
        pool:
          vmImage: $(vmImageName)
        steps:
        - task: Docker@2
          displayName: Build and push an image to container registry
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
    
  7. Sélectionnez Enregistrer et exécuter et Enregistrer et réexécuter.

  8. Sélectionnez la tâche pour afficher les logs et vérifier que le pipeline s’est exécuté correctement.

Le modèle Docker crée la connexion de service à votre Registre de conteneurs Azure et utilise la tâche de Docker@2 pour générer et envoyer (push) l’image Docker au registre.

La tâche Docker@2 est conçue pour simplifier le processus de génération, d’envoi (push) et de gestion des images Docker au sein de vos pipelines Azure. Cette tâche prend en charge un large éventail de commandes Docker, notamment la génération, l’envoi (push), la connexion, la déconnexion, le démarrage, l’arrêt et l’exécution.

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.