Partager via


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

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Cet article vous guide tout au long de la configuration et de l’installation d’Azure Pipelines pour générer et envoyer (push) une image Docker à un registre Azure Container Registry, Docker Hub et Google Artifact Registry. En outre, il détaille l’utilisation de l’authentification System.AccessToken sécurisée au sein de votre pipeline.

Cet article vous guide tout au long de la configuration et de l’installation d’Azure Pipelines pour générer et envoyer (push) une image Docker vers un Docker Hub et Google Artifact Registry. En outre, il détaille l’utilisation de l’authentification System.AccessToken sécurisée au sein de votre pipeline.

Vous allez apprendre à créer un pipeline YAML pour générer et envoyer (push) une image Docker à un registre de conteneurs. La tâche Docker@2 est utilisée pour générer et envoyer (push) l’image au registre de conteneurs.

Prérequis

  • Un projet Azure DevOps.
  • Registre de conteneurs (Docker Hub, Google Artifact Registry ou Azure Container Registry).
  • Un référentiel GitHub avec un fichier Dockerfile. Si vous n’en avez pas, vous pouvez utiliser l’exemple de dépôt Dans votre navigateur, accédez à l’exemple de référentiel, puis le fork sur votre compte GitHub.
  • Docker. Si vous utilisez un agent auto-hébergé, vérifiez que Docker est installé et que le moteur Docker s’exécute avec des privilèges élevés. Les agents hébergés par Microsoft ont Préinstallé Docker.
  • Un projet Azure DevOps.
  • Registre de conteneurs (Docker Hub ou Google Artifact Registry).
  • Un référentiel GitHub avec un fichier Dockerfile. Si vous n’en avez pas, vous pouvez utiliser l’exemple de dépôt Dans votre navigateur, accédez à l’exemple de référentiel, puis le fork sur votre compte GitHub.
  • Docker. Si vous utilisez un agent auto-hébergé, vérifiez que Docker est installé et que le moteur Docker s’exécute avec des privilèges élevés. Les agents hébergés par Microsoft ont Préinstallé Docker.

Créer une connexion de service 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. Accédez à la page Connexions de service dans votre projet Azure DevOps pour créer une connexion de service et sélectionner le type de connexion Docker Registry.

Il existe différents processus pour créer une connexion de service pour un Hub Docker et un Registre Google Artifact.

Choisissez l’option Docker Hub sous Connexion au service de registre Docker et fournissez votre nom d’utilisateur et votre mot de passe pour créer une connexion au service Docker.

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

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.

Les étapes suivantes décrivent comment créer un pipeline YAML qui utilise la tâche Docker@2 pour générer et envoyer (push) l’image.

  1. Accédez à votre projet Azure DevOps et sélectionnez Pipelines dans le menu de gauche.

  2. Sélectionnez Nouveau pipeline pour créer un pipeline.

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

  4. 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.
  5. Sélectionnez votre dépôt. Si vous êtes redirigé vers GitHub

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

  7. Remplacez le contenu du fichier azure-pipelines.yml par le code suivant.

  8. Selon que vous déployez une application Linux ou Windows, veillez à définir vmImage respectivement sur ubuntu-latest ou windows-latest. Si vous utilisez un agent auto-hébergé, définissez vmImage le nom du pool qui contient l’agent auto-hébergé avec la fonctionnalité Docker. Vous pouvez ajouter la demands: docker propriété pour vous assurer qu’un agent avec Docker est sélectionné.

  9. Remplacez <docker connection> par le nom de la connexion de service Docker que vous avez créée précédemment.

  10. Remplacez <target repository name> par le nom du référentiel dans le registre de conteneurs dans lequel vous souhaitez envoyer (push) l’image. Par exemple : <your-docker-hub-username>/<repository-name>.

    
     trigger:
     - main
    
     pool:
     vmImage: 'ubuntu-latest' 
    
     variables:
     repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
     inputs:
     containerRegistry: '<docker connection>'
     repository: $(repositoryName)
     command: 'buildAndPush'
     Dockerfile: '**/Dockerfile'
    
    
  11. Lorsque vous avez terminé, sélectionnez Enregistrer et exécuter.

  12. Lorsque vous enregistrez le fichier azure-pipelines.yml dans 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.

  9. Selon que vous déployez une application Linux ou Windows, veillez à définir vmImage respectivement sur ubuntu-latest ou windows-latest.

  10. Remplacez <target repository name> par le nom du référentiel dans le registre de conteneurs dans lequel vous souhaitez envoyer (push) l’image. Par exemple : <your-docker-hub-username>/<repository-name>.

  11. Remplacez <docker connection> par le nom de la connexion de service Docker que vous avez créée précédemment.

    
    trigger:
    - main
    
    pool:
    name: default
    demands: docker
    
    variables:
    repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
    inputs:
    containerRegistry: '<docker connection>'
    repository: $(repositoryName)
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'
    
    
  12. Sélectionnez Enregistrer et exécuter.

  13. Sur la page Enregistrer et exécuter, sélectionnez une nouvelle fois Enregistrer et exécuter.

Vous pouvez regarder l’exécution du pipeline et afficher les journaux pour voir l’image Docker générée et envoyée (push) au registre de conteneurs.

Utilisation de System.AccessToken pour l’authentification dans Docker@2 tâche

Vous pouvez vous authentifier auprès d’un registre de conteneurs à l’aide d’Azure System.AccessToken DevOps. Ce jeton permet un accès sécurisé aux ressources au sein de votre pipeline sans exposer d’informations d’identification sensibles.

L’exemple de pipeline YAML suivant, la tâche Docker@2 est utilisée pour se connecter au registre de conteneurs et envoyer (push) l’image Docker. Il System.AccessToken est défini en tant que variable d’environnement pour authentifier les commandes Docker.

Remplacez par <docker connection> le nom de votre connexion de service de Registre Docker. Remplacez <your repository> par le nom de votre référentiel Docker.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)