- Publié le
Réaliser des Builds Docker avec un Agent Auto-hébergé dans Azure Pipelines
- Auteurs
- Nom
- Sébastien Chossat
- https://x.com/S_Chossat
Lorsque vous réalisez des builds Docker dans une pipeline CI/CD, il est souvent nécessaire d'utiliser des images Docker capables de lancer elles-mêmes des commandes Docker.
Dans certains cas, comme pour une utilisation personnelle, il est souvent plus avantageux d'utiliser un agent auto-hébergé, que ce soit sur un serveur tiers ou sur votre machine personnelle, plutôt que de recourir aux agents proposés par Azure.
Pour vous faciliter la tâche, j'ai préparé une image Docker prête à l'emploi : https://github.com/CultureDevOps/simple-azp-agent-docker-dind.
Fonctionnement d’une Pipeline Azure avec un Agent Auto-hébergé
Le développeur effectue un commit de son code avec un Dockerfile
dans le dépôt Azure. Ce commit déclenche alors l'exécution de la pipeline.
Pendant ce temps, l'agent auto-hébergé fonctionne en arrière-plan sur une machine et interroge régulièrement la pipeline Azure pour vérifier s'il doit commencer à travailler.
Lorsque la pipeline est déclenchée, l'agent construit l'image Docker et la pousse dans Azure Container Registry.
Utilisation de l’Agent sur une Machine Linux
Dans le dépôt GitHub, vous trouverez le fichier docker-compose-linux.yml
.
Commencez par adapter les variables d'environnement pour qu'elles correspondent à votre compte Azure DevOps :
version: "3.8"
services:
dind:
image: culturedevops/simple-azp-agent-docker-dind:latest
tty: true
restart: unless-stopped
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
AZP_URL: "https://dev.azure.com/youraccount"
AZP_AGENT_NAME: "azure-agent-desktop"
AZP_POOL: "azure-agent"
AZP_TOKEN: "Your Token Here"
Pour lancer l'agent, placez-vous dans le répertoire et exécutez la commande suivante :
docker-compose -f "docker-compose-linux.yml" up -d
Utilisation de l’Agent sur une Machine Windows
De la même manière, dans le dépôt GitHub, vous trouverez le fichier docker-compose-windows.yml
. Modifiez également les variables d’environnement comme indiqué.
version: "3.8"
services:
dind:
image: culturedevops/simple-azp-agent-docker-dind:latest
tty: true
restart: unless-stopped
volumes:
- "//var/run/docker.sock:/var/run/docker.sock"
group_add:
- "0"
environment:
AZP_URL: "https://dev.azure.com/youraccount"
AZP_AGENT_NAME: "azure-agent-desktop"
AZP_POOL: "azure-agent"
AZP_TOKEN: "Your Token Here"
Pour lancer l'agent, placez-vous dans le répertoire et exécutez la commande suivante :
docker-compose -f "docker-compose-windows.yml" up -d
Vérification de l’Agent dans Azure
Une fois l'agent lancé, vous pouvez vérifier qu'il fonctionne correctement en vous rendant dans Organisation Settings > Agent pools > Votre pool > Agents.
Exemple de Pipeline Azure pour la Construction d’une Image Docker
Créez un fichier azure-pipelines.yml
à la racine de votre projet et configurez les variables comme suit :
# 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:
dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
imageRepository: '<IMAGE_NAME>'
containerRegistry: 'yourregistry.azurecr.io'
tag: '$(Build.BuildId)'
dockerfile: '$(Build.SourcesDirectory)/Dockerfile'
dockerimage: '$(imageRepository)/docker_image'
agentName: 'azure-agent'
vmImageName: 'alpine'
stages:
- stage: Build
displayName: Build and push stage
pool:
name: $(agentName)
vmImage: $(vmImageName)
jobs:
- job: Build_docker_image
displayName: Build Docker Image
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(dockerimage)
dockerfile: $(dockerfile)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
latest
Une fois ces configurations effectuées, poussez votre Dockerfile
dans Azure Repos. Après quelques secondes, la pipeline sera automatiquement déclenchée et votre image Docker sera construite. Vous pourrez suivre l'exécution de la pipeline dans l'onglet Pipelines de votre projet.
Conclusion
Vous disposez désormais d'une méthode simple et efficace pour réaliser des builds Docker dans Azure Pipelines. Grâce à l’utilisation d’un agent auto-hébergé, vous pouvez facilement intégrer Docker dans votre chaîne CI/CD sur Azure.