Agent de build Azure DevOps : disque saturé, la solution

  • 30 janvier 2026
  • 3 min. à lire

Pipeline en échec, agent offline, builds qui plantent sans raison apparente. Le diagnostic tombe : disque saturé à 99%. Un classique des agents self-hosted qu'on peut régler définitivement.

Vendredi matin, le pipeline de déploiement échoue. L’agent Azure DevOps self-hosted ne répond plus. Un rapide df -h sur l’instance EC2 révèle le verdict :

Filesystem       Size  Used Avail Use% Mounted on
/dev/root         67G   66G  670M  99% /

99% d’utilisation. Plus assez d’espace pour que Docker pull une image ou que Git clone un repo. Le pipeline est bloqué.

Un agent Azure DevOps self-hosted qui tourne depuis quelques semaines finit souvent avec un disque plein. Le coupable n’est pas Azure DevOps, mais ce qu’il laisse derrière lui.

Warnings Azure DevOps : Free disk space on / is lower than 5%

Trouver le coupable

Sur un agent de build, les suspects sont toujours les mêmes :

docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          202       0         48.91GB   48.91GB (100%)
Containers      0         0         0B        0B
Build Cache     87        0         13.29GB   13.29GB (100%)

62 Go d’images Docker et de cache. 202 images accumulées, zéro en cours d’utilisation.

Chaque pipeline qui build une image Docker la laisse sur le serveur. build-7667, build-7546, build-7329… Elles s’empilent, semaine après semaine, sans que personne ne les supprime.

docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.CreatedSince}}' | head -10
REPOSITORY                                          TAG              CREATED
1111111111111.dkr.ecr.eu-west-3.amazonaws.com/app   build-7746       2 hours ago
1111111111111.dkr.ecr.eu-west-3.amazonaws.com/app   build-7667       2 days ago
1111111111111.dkr.ecr.eu-west-3.amazonaws.com/app   build-7329       2 weeks ago
1111111111111.dkr.ecr.eu-west-3.amazonaws.com/app   build-6465       6 weeks ago

Des images de 6 semaines. Inutiles, mais toujours là.

Pourquoi Azure DevOps ne nettoie pas

Azure DevOps gère la rétention des artefacts et des runs dans le cloud. Mais ce qui se passe sur votre agent self-hosted lui échappe :

Ce qu’Azure DevOps gèreCe qu’il ne gère pas
Rétention des runs et artefactsImages Docker locales
Nettoyage du workspace (option clean)Cache Docker
Logs des pipelinesEspace disque de l’agent

L’agent est votre machine. Son entretien vous revient.

La solution : nettoyage automatique

Un cron job quotidien qui supprime les images de plus de 7 jours règle le problème définitivement.

Créer le script

sudo tee /etc/cron.daily/docker-cleanup << 'EOF'
#!/bin/bash
# Nettoyage Docker - conservation 7 jours (168h)
docker image prune -a --filter "until=168h" -f >> /var/log/docker-cleanup.log 2>&1
docker builder prune --filter "until=168h" -f >> /var/log/docker-cleanup.log 2>&1
docker volume prune -f >> /var/log/docker-cleanup.log 2>&1
EOF

sudo chmod +x /etc/cron.daily/docker-cleanup

Le script s’exécute chaque jour via cron. Les images de moins de 7 jours sont conservées (utile pour un rollback rapide), les autres sont supprimées.

Nettoyage immédiat

Pour débloquer l’agent maintenant :

docker image prune -a --filter "until=168h" -f
docker builder prune --filter "until=168h" -f
docker volume prune -f

Résultat sur notre cas : 40 Go libérés. Le disque passe de 99% à 39%.

Ajuster la rétention

Adaptez la durée selon votre contexte :

SituationRétentionParamètre
Builds très fréquents, petit disque3 joursuntil=72h
Usage standard7 joursuntil=168h
Besoin de rollback fréquent14 joursuntil=336h

Ne plus se faire surprendre : monitoring

Le nettoyage automatique règle le problème Docker. Mais d’autres fichiers peuvent s’accumuler. Une alerte CloudWatch vous prévient avant que le disque ne sature.

Prérequis IAM

L’instance EC2 doit avoir un rôle IAM avec la policy CloudWatchAgentServerPolicy. Sans cela, l’agent ne peut pas envoyer les métriques :

# Ce message dans les logs indique un problème de permissions
NoCredentialProviders: no valid providers in chain

Attachez un rôle via EC2 → Instance → Actions → Security → Modify IAM role.

Installer l’agent CloudWatch

# Avec wget
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
# Ou avec curl
curl -O https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb

sudo dpkg -i amazon-cloudwatch-agent.deb

Configurer la métrique disque

Créez le fichier /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json :

{
  "metrics": {
    "metrics_collected": {
      "disk": {
        "measurement": ["used_percent"],
        "resources": ["/"],
        "ignore_file_system_types": ["tmpfs", "devtmpfs"]
      }
    },
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    }
  }
}

Puis chargez la configuration :

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config -m ec2 \
  -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s

Créer l’alarme

Dans CloudWatch → Alarms → Create alarm :

  • Metric : CWAgentdisk_used_percent
  • Threshold : Greater than 80 (ou 50 si vous préférez anticiper davantage)
  • Notification : votre SNS topic

Coût : ~0.40$/mois pour la métrique et l’alarme.

Métrique CloudWatch disk_used_percent avec chute après nettoyage

Récapitulatif

# Diagnostic
df -h
docker system df

# Nettoyage immédiat
docker image prune -a --filter "until=168h" -f
docker builder prune --filter "until=168h" -f
docker volume prune -f

# Automatisation
sudo tee /etc/cron.daily/docker-cleanup << 'EOF'
#!/bin/bash
docker image prune -a --filter "until=168h" -f >> /var/log/docker-cleanup.log 2>&1
docker builder prune --filter "until=168h" -f >> /var/log/docker-cleanup.log 2>&1
docker volume prune -f >> /var/log/docker-cleanup.log 2>&1
EOF
sudo chmod +x /etc/cron.daily/docker-cleanup

# Monitoring (CloudWatch Agent + alarme à 80%)

Un agent de build self-hosted demande un minimum d’entretien. Le nettoyage automatique des images Docker et une alerte sur l’espace disque transforment un problème récurrent en non-sujet.

10 minutes de setup, zéro pipeline bloqué.

Nicolas Verlhiac

Nicolas Verlhiac

Full stack software expert | E-commerce & CRM

Nous sommes spécialisés dans la création de solutions technologiques innovantes qui aident les entreprises à rester compétitives et à prospérer.

tracking-thumb