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
Un compte GitHub. Si vous n’en avez pas, inscrivez-vous gratuitement.
Rôle d’administrateur pour les connexions de service dans votre projet Azure DevOps.
Compte Azure avec un abonnement actif. Si vous n’en avez pas, inscrivez-vous gratuitement.
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
Accédez au portail Azure.
Sélectionnez Créer une ressource dans le volet de navigation gauche, puis sélectionnez Conteneurs, puis Container Registry.
Sélectionnez votre abonnement, puis sélectionnez votre groupe de ressources ou créez-en un.
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.
Sélectionnez votre emplacement et votre SKU préférés, puis sélectionnez Vérifier et créer.
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
Accédez au portail Azure.
Sélectionnez Créer une ressource dans le volet de navigation gauche, puis sélectionnez Machine virtuelle - >Créer.
Sélectionnez votre abonnement, puis sélectionnez le groupe de ressources que vous avez utilisé pour créer votre registre de conteneurs.
Nommez votre machine virtuelle et choisissez une image.
Entrez votre nom d’utilisateur et votre mot de passe, puis sélectionnez Vérifier et créer.
Passez en revue vos paramètres, puis sélectionnez Créer lorsque vous avez terminé.
Sélectionnez Accéder à la ressource quand le déploiement est terminé.
Créer un pool d’agents
Dans votre projet Azure DevOps, sélectionnez l’icône d’engrenage pour accéder aux paramètres du projet.
Sélectionnez Pools d’agents, puis sélectionnez Ajouter un pool.
Sélectionnez Nouveau, puis sélectionnez Autohébergé dans le menu déroulant Type de pool.
Nommez votre pool, puis cochez la case Accorder une autorisation d’accès à tous les pipelines.
Sélectionnez Créer lorsque vous avez terminé.
Sélectionnez maintenant le pool que vous venez de créer, puis sélectionnez Nouvel agent.
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.
Créer un jeton d’accès personnel
Dans votre projet Azure DevOps, sélectionnez Paramètres utilisateur, puis sélectionnez Jetons d’accès personnels.
Sélectionnez Nouveau jeton pour créer un jeton d’accès personnel.
Entrez un nom pour votre PAT, puis choisissez une date d’expiration.
Sélectionnez Définition personnalisée dans Étendues, puis sélectionnez Afficher toutes les étendues.
Sélectionnez Pools d’agents ->Lire et gérer et Groupes de déploiement ->Lire et gérer.
Sélectionnez Créer lorsque vous avez terminé, puis enregistrez votre PAT dans un emplacement sûr.
Configurer un agent autohébergé
Dans le portail Azure, connectez-vous à votre machine virtuelle.
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
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")
Exécutez la commande suivante pour commencer à configurer votre agent.
.\config.cmd
Entrez l’URL de votre serveur lorsque vous êtes invité à entrer l’entrée. Exemple : https://dev.azure.com/fabrikamFiber
Appuyez sur Entrée lorsque vous êtes invité à entrer le type d’authentification pour choisir l’authentification PAT.
Collez votre jeton d’accès personnel que vous avez créé précédemment, puis appuyez sur Entrée.
Entrez le nom de votre pool d’agents, puis entrez le nom de votre agent.
Conservez la valeur par défaut du dossier de travail, puis entrez Y si vous souhaitez exécuter votre agent en tant que service.
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>
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
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
Votre agent doit être répertorié maintenant dans votre pool d’agents - >Agents dans le portail Azure DevOps.
Configurer l’identité managée
Dans le portail Azure, accédez à la machine virtuelle que vous avez créée précédemment.
Sélectionnez Identité dans le volet de navigation gauche, puis activez l’identité affectée par le système.
Sélectionnez Enregistrer lorsque vous avez terminé, puis confirmez votre choix.
Sélectionnez Attributions de rôles Azure, puis Ajouter une attribution de rôle.
Sélectionnez Groupe de ressources dans le menu déroulant Étendue.
Sélectionnez votre abonnement et votre groupe de ressources, puis sélectionnez le rôle AcrPush.
Répétez les étapes 5 et 6 pour ajouter le rôle AcrPull.
Créer une connexion de service de registre Docker
Dans votre projet Azure DevOps, sélectionnez l’icône d’engrenage pour accéder aux paramètres du projet.
Sélectionnez Connexions de service dans le volet gauche.
Sélectionnez Nouvelle connexion de service, puis Registre Docker et Suivant.
Sélectionnez Azure Container Registry, puis sélectionnez Identité du service géré comme Type d’authentification.
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.
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.
Sélectionnez Enregistrer lorsque vous avez terminé.
Générer et publier sur Azure Container Registry
Dans votre projet Azure DevOps, sélectionnez Pipelines, puis Créer un pipeline.
Sélectionnez le service hébergeant votre code source (Azure Repos, GitHub, etc.).
Sélectionnez votre référentiel, puis sélectionnez Pipeline de démarrage.
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)
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.
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