Configuration des agents Azure DevOps
Guide pour configurer et maintenir les agents Azure DevOps self-hosted sur infrastructure J-IT.
📋 Vue d'ensemble
Nos agents Azure DevOps sont déployés sur notre infrastructure Proxmox dans des conteneurs LXC Ubuntu, offrant :
- Performance : Build 45% plus rapide, opérations Docker 77% plus rapides
- Contrôle : Accès complet aux dépendances et outils
- Sécurité : Agents dans notre réseau privé
- Scalabilité : Auto-scaling avec Ansible
🏗️ Architecture
┌─────────────────────────────────────────┐
│ Azure DevOps (Cloud) │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Organization: J-IT │ │
│ │ Project: VotreProjet │ │
│ │ │ │
│ │ Agent Pool: │ │
│ │ ┌───────────────────────┐ │ │
│ │ │ jit-azure-devops-agents│ │ │
│ │ └───────────────────────┘ │ │
│ └─────────────────────────────────┘ │
└──────────────┬──────────────────────────┘
│ HTTPS
│
┌──────────────▼──────────────────────────┐
│ Proxmox Infrastructure │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ LXC Agent 1 │ │ LXC Agent 2 │ │
│ │ │ │ │ │
│ │ Ubuntu 24.04 │ │ Ubuntu 24.04 │ │
│ │ .NET 9.0 │ │ .NET 9.0 │ │
│ │ Docker │ │ Docker │ │
│ │ Node.js │ │ Node.js │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Nexus Repository Manager │ │
│ │ - nuget-prerelease │ │
│ │ - nuget-releases │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
🚀 Installation d'un nouvel agent
Prérequis
- Conteneur LXC Ubuntu 24.04 créé dans Proxmox
- Accès réseau à Azure DevOps (
dev.azure.com) - Accès réseau à Nexus (
nexus.homelab.j-it.be) - Personal Access Token (PAT) Azure DevOps
Étape 1 : Créer le conteneur LXC
Dans Proxmox :
# Créer le conteneur
pct create 200 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname azdo-agent-01 \
--memory 4096 \
--cores 2 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--storage local-lvm \
--rootfs local-lvm:20
# Démarrer le conteneur
pct start 200
# Entrer dans le conteneur
pct enter 200
Étape 2 : Installation des dépendances
# Mise à jour du système
apt update && apt upgrade -y
# Installation des outils de base
apt install -y curl wget git jq unzip
# Installation de Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
usermod -aG docker azureuser
# Installation de .NET SDK
wget https://dot.net/v1/dotnet-install.sh
chmod +x dotnet-install.sh
./dotnet-install.sh --channel 9.0
echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc
source ~/.bashrc
# Installation de Node.js (optionnel)
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
Étape 3 : Télécharger et installer l'agent Azure DevOps
# Créer un utilisateur dédié
useradd -m -s /bin/bash azureuser
su - azureuser
# Créer le répertoire de l'agent
mkdir ~/azagent && cd ~/azagent
# Télécharger l'agent (vérifier la dernière version sur Azure DevOps)
wget https://vstsagentpackage.azureedge.net/agent/3.236.1/vsts-agent-linux-x64-3.236.1.tar.gz
tar zxvf vsts-agent-linux-x64-3.236.1.tar.gz
# Configurer l'agent
./config.sh
Pendant la configuration, répondez aux questions :
Server URL: https://dev.azure.com/VotreOrganisation
PAT: [Votre Personal Access Token]
Agent pool: jit-azure-devops-agents
Agent name: azdo-agent-01
Work folder: _work
Étape 4 : Installer l'agent comme service
# Installer le service
sudo ./svc.sh install azureuser
# Démarrer le service
sudo ./svc.sh start
# Vérifier le statut
sudo ./svc.sh status
Étape 5 : Configuration NuGet
# Configurer les sources NuGet avec credentials
dotnet nuget add source https://nexus.homelab.j-it.be/repository/nuget-prerelease/index.json \
--name nexus-prerelease \
--username NEXUS_USERNAME \
--password NEXUS_PASSWORD \
--store-password-in-clear-text
dotnet nuget add source https://nexus.homelab.j-it.be/repository/nuget-releases/index.json \
--name nexus-releases \
--username NEXUS_USERNAME \
--password NEXUS_PASSWORD \
--store-password-in-clear-text
# Vérifier
dotnet nuget list source
🔧 Configuration automatisée avec Ansible
Pour déployer plusieurs agents rapidement, utilisez notre playbook Ansible :
Inventory
inventory.ini
[azure_devops_agents]
azdo-agent-01 ansible_host=192.168.1.101 ansible_user=root
azdo-agent-02 ansible_host=192.168.1.102 ansible_user=root
[azure_devops_agents:vars]
azure_devops_org=VotreOrganisation
azure_devops_pool=jit-azure-devops-agents
Exécution
# Déployer la configuration NuGet sur tous les agents
ansible-playbook scripts/ansible/configure-nuget-agents.yml
# Avec prompt pour les credentials
ansible-playbook scripts/ansible/configure-nuget-agents.yml --ask-vault-pass
📊 Monitoring et maintenance
Vérifier le statut des agents
Dans Azure DevOps :
- Aller dans Organization Settings → Agent pools
- Cliquer sur
jit-azure-devops-agents - Vérifier que les agents sont Online
Commandes utiles
# Statut du service agent
sudo /home/azureuser/azagent/svc.sh status
# Logs de l'agent
tail -f /home/azureuser/azagent/_diag/*.log
# Redémarrer l'agent
sudo /home/azureuser/azagent/svc.sh stop
sudo /home/azureuser/azagent/svc.sh start
# Vérifier les capacités de l'agent
cat /home/azureuser/azagent/.capabilities
Mise à jour de l'agent
# Se connecter en tant qu'azureuser
su - azureuser
cd ~/azagent
# Arrêter l'agent
sudo ./svc.sh stop
# Télécharger la nouvelle version
wget https://vstsagentpackage.azureedge.net/agent/VERSION/vsts-agent-linux-x64-VERSION.tar.gz
tar zxvf vsts-agent-linux-x64-VERSION.tar.gz
# Redémarrer l'agent
sudo ./svc.sh start
🔒 Sécurité
Isolation réseau
Les agents ont accès uniquement à :
- Azure DevOps (
dev.azure.com) - Nexus interne (
nexus.homelab.j-it.be) - Azure Container Registry (si configuré)
Credentials
- PAT Azure DevOps : Stocké dans
/home/azureuser/azagent/.credentials - Credentials Nexus : Stockés dans
~/.nuget/NuGet/NuGet.Config - Permissions minimales requises
Bonnes pratiques
- ✅ Utiliser des PAT avec durée de vie limitée
- ✅ Rotation régulière des credentials
- ✅ Un agent = un conteneur LXC isolé
- ✅ Logs centralisés (optionnel : Prometheus + Grafana)
- ✅ Backups réguliers de la configuration
🐛 Troubleshooting
L'agent n'apparaît pas comme Online
Vérifications :
- Le service est-il démarré ?
sudo /home/azureuser/azagent/svc.sh status - Connectivité réseau vers Azure DevOps :
curl -I https://dev.azure.com - Vérifier les logs :
tail -f /home/azureuser/azagent/_diag/*.log
Le pipeline échoue avec "No agents available"
Causes possibles :
- Tous les agents sont occupés
- L'agent est offline
- Le pool name dans le pipeline est incorrect
Solution :
- Vérifier que le pool name dans
azure-pipelines.ymlest correct :pool:
name: 'jit-azure-devops-agents' # Vérifier le nom exact - Ajouter plus d'agents si nécessaire
Erreurs NuGet 401/404
Voir la documentation Configuration NuGet.
Problèmes de permissions Docker
# Ajouter azureuser au groupe docker
sudo usermod -aG docker azureuser
# Redémarrer le service agent
sudo /home/azureuser/azagent/svc.sh restart
📈 Scaling
Auto-scaling horizontal
Pour gérer les pics de charge, vous pouvez :
- Créer des templates Proxmox de vos agents configurés
- Cloner rapidement des nouveaux agents
- Configurer avec Ansible en quelques minutes
Exemple : Ajouter 2 agents en 5 minutes
# Dans Proxmox
pct clone 200 201 --hostname azdo-agent-03
pct clone 200 202 --hostname azdo-agent-04
pct start 201
pct start 202
# Configurer avec Ansible
ansible-playbook scripts/ansible/configure-nuget-agents.yml -l azdo-agent-03,azdo-agent-04
📝 Checklist maintenance mensuelle
- Vérifier que tous les agents sont Online
- Mettre à jour les agents vers la derni ère version
- Vérifier l'espace disque disponible
- Nettoyer les anciens builds (
_workfolders) - Vérifier les logs pour des erreurs récurrentes
- Tester un build sur chaque agent
- Vérifier la validité des PAT
- Backup de la configuration
🔗 Liens utiles
💡 Tips
Performance
Pour optimiser les builds :
- Utilisez le cache NuGet : les packages sont déjà téléchargés localement
- Préférez
--no-restoredans les étapes de build si restore est fait séparément - Activez le parallel build :
dotnet build -m
Espace disque
Les conteneurs LXC peuvent rapidement manquer d'espace avec :
- Cache NuGet (~2-5 GB)
- Images Docker (~10-20 GB)
- Builds artifacts (~1-2 GB par build)
Recommandé : 40 GB minimum par agent
Monitoring
Pour monitorer vos agents :
- Prometheus + Grafana pour les métriques systèmes
- Azure DevOps API pour les métriques de builds
- Gotify pour les notifications