Partager via


Générer et publier des images Docker sur Azure Container Registry

Azure DevOps Services | Azure DevOps Server 2022

À l’aide d’Azure Pipelines, vous pouvez configurer un workflow de pipeline pour générer et publier vos images Docker dans Azure Container Registry. Dans cet article, vous allez apprendre à :

  • Création d’un Azure Container Registry
  • Configurer un agent autohébergé sur une machine virtuelle Azure
  • Configurer l’identité de service administré
  • Création d’une connexion de service Docker Registry
  • Générer et publier votre image sur Azure Container Registry

Prérequis

Obtenir le code

Dupliquez ou clonez l’exemple d’application à suivre avec ce didacticiel.

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

Création d’un Azure Container Registry

  1. Accédez au portail Azure.

  2. Sélectionnez Créer une ressource dans le volet de navigation gauche, puis sélectionnez Conteneurs, puis Container Registry.

  3. Sélectionnez votre abonnement, puis sélectionnez votre groupe de ressources ou créez-en un.

  4. Entrez un nom de registre pour votre registre de conteneurs. Le nom du registre doit être unique dans Azure et doit contenir au moins 5 caractères.

  5. Sélectionnez votre emplacement et votre SKU préférés, puis sélectionnez Vérifier et créer.

  6. Passez en revue vos paramètres, puis sélectionnez Créer lorsque vous avez terminé.

Configurer une machine virtuelle d’agent autohébergé

Pour utiliser une identité du service géré avec Azure Pipelines pour publier des images Docker dans Azure Container Registry, nous devons configurer notre propre agent autohébergé sur une machine virtuelle Azure.

Créer une machine virtuelle

  1. Accédez au portail Azure.

  2. Sélectionnez Créer une ressource dans le volet de navigation gauche, puis sélectionnez Machine virtuelle - >Créer.

  3. Sélectionnez votre abonnement, puis sélectionnez le groupe de ressources que vous avez utilisé pour créer votre registre de conteneurs.

  4. Nommez votre machine virtuelle et choisissez une image.

  5. Entrez votre nom d’utilisateur et votre mot de passe, puis sélectionnez Vérifier et créer.

  6. Passez en revue vos paramètres, puis sélectionnez Créer lorsque vous avez terminé.

  7. Sélectionnez Accéder à la ressource quand le déploiement est terminé.

Créer un pool d’agents

  1. Dans votre projet Azure DevOps, sélectionnez l’icône d’engrenage icône d’engrenage pour accéder aux paramètres du projet.

  2. Sélectionnez Pools d’agents, puis sélectionnez Ajouter un pool.

  3. Sélectionnez Nouveau, puis sélectionnez Autohébergé dans le menu déroulant Type de pool.

  4. Nommez votre pool, puis cochez la case Accorder une autorisation d’accès à tous les pipelines.

  5. Sélectionnez Créer lorsque vous avez terminé.

  6. Sélectionnez maintenant le pool que vous venez de créer, puis sélectionnez Nouvel agent.

  7. Nous allons utiliser les instructions de cette fenêtre pour configurer votre agent dans la machine virtuelle que vous avez créée précédemment. Sélectionnez le bouton Copier pour copier le lien de téléchargement dans votre presse-papiers.

    Capture d’écran montrant comment configurer un agent.

Créer un jeton d’accès personnel

  1. Dans votre projet Azure DevOps, sélectionnez Paramètres utilisateur, puis sélectionnez Jetons d’accès personnels.

  2. Sélectionnez Nouveau jeton pour créer un jeton d’accès personnel.

  3. Entrez un nom pour votre PAT, puis choisissez une date d’expiration.

  4. Sélectionnez Définition personnalisée dans Étendues, puis sélectionnez Afficher toutes les étendues.

  5. Sélectionnez Pools d’agents ->Lire et gérer et Groupes de déploiement ->Lire et gérer.

  6. Sélectionnez Créer lorsque vous avez terminé, puis enregistrez votre PAT dans un emplacement sûr.

Configurer un agent autohébergé

  1. Dans le portail Azure, connectez-vous à votre machine virtuelle.

  2. Dans une invite de commandes PowerShell avec élévation de privilèges, exécutez la commande suivante pour télécharger l’agent.

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. Exécutez la commande suivante pour extraire et créer votre agent.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Exécutez la commande suivante pour commencer à configurer votre agent.

    .\config.cmd
    
  5. Entrez l’URL de votre serveur lorsque vous êtes invité à entrer l’entrée. Exemple : https://dev.azure.com/fabrikamFiber

  6. Appuyez sur Entrée lorsque vous êtes invité à entrer le type d’authentification pour choisir l’authentification PAT.

  7. Collez votre jeton d’accès personnel que vous avez créé précédemment, puis appuyez sur Entrée.

  8. Entrez le nom de votre pool d’agents, puis entrez le nom de votre agent.

  9. Conservez la valeur par défaut du dossier de travail, puis entrez Y si vous souhaitez exécuter votre agent en tant que service.

    Capture d’écran montrant comment configurer un agent sur une machine virtuelle Azure.

  10. Maintenant que l’agent est prêt à écouter des travaux, installons Docker sur notre machine virtuelle. Exécutez la commande suivante pour télécharger Docker.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Accédez à votre chemin de téléchargement, puis exécutez la commande suivante pour installer et démarrer Docker.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Revenez maintenant au dossier de votre agent et exécutez le fichier « cmd » pour exécuter l’agent sur votre machine virtuelle Azure.

    .\run.cmd
    
  13. Votre agent doit être répertorié maintenant dans votre pool d’agents - >Agents dans le portail Azure DevOps.

    Capture d’écran montrant l’agent disponible sous l’onglet Agents.

Configurer l’identité managée

  1. Dans le portail Azure, accédez à la machine virtuelle que vous avez créée précédemment.

  2. Sélectionnez Identité dans le volet de navigation gauche, puis activez l’identité affectée par le système.

  3. Sélectionnez Enregistrer lorsque vous avez terminé, puis confirmez votre choix.

    Capture d’écran montrant comment activer l’identité affectée par le système.

  4. Sélectionnez Attributions de rôles Azure, puis Ajouter une attribution de rôle.

  5. Sélectionnez Groupe de ressources dans le menu déroulant Étendue.

  6. Sélectionnez votre abonnement et votre groupe de ressources, puis sélectionnez le rôle AcrPush.

  7. Répétez les étapes 5 et 6 pour ajouter le rôle AcrPull.

    Capture d’écran montrant comment configurer les rôles acrpull et push.

Créer une connexion de service de registre Docker

  1. Dans votre projet Azure DevOps, sélectionnez l’icône d’engrenage icône d’engrenage pour accéder aux paramètres du projet.

  2. Sélectionnez Connexions de service dans le volet gauche.

  3. Sélectionnez Nouvelle connexion de service, puis Registre Docker et Suivant.

  4. Sélectionnez Azure Container Registry, puis sélectionnez Identité du service géré comme Type d’authentification.

  5. Saisissez votre ID d’abonnement, votre Nom d'abonnement et votre serveur de connexion au registre de conteneurs Azure. Collez l’ID de locataire attribué au système de votre machine virtuelle que vous avez créé à l’étape précédente dans le champ de texte ID de locataire.

  6. Entrez un nom pour votre connexion de service, puis cochez la case Accorder une autorisation d’accès à tous les pipelines. Pour sélectionner cette option, vous aurez besoin du rôle de connexion du rôle d’administrateur.

  7. Sélectionnez Enregistrer lorsque vous avez terminé.

    Capture d’écran montrant comment configurer un fichier MSI de connexion de service de registre Docker.

Générer et publier sur Azure Container Registry

  1. Dans votre projet Azure DevOps, sélectionnez Pipelines, puis Créer un pipeline.

  2. Sélectionnez le service hébergeant votre code source (Azure Repos, GitHub, etc.).

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

  4. Supprimez le pipeline yaml par défaut et utilisez l’extrait de code suivant :

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. Une fois l’exécution du pipeline terminée, vous pouvez vérifier votre image dans Azure. Accédez à votre registre Azure Container Registry dans le portail Azure, puis sélectionnez Référentiels.

    Capture d’écran montrant l’image dans le portail Azure.

Nettoyer les ressources

Si vous ne prévoyez pas de continuer à utiliser cette application, supprimez le groupe de ressources pour éviter les frais courants.

az group delete --name myapp-rg