Aller au contenu principal

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 :

  1. Aller dans Organization SettingsAgent pools
  2. Cliquer sur jit-azure-devops-agents
  3. 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 :

  1. Le service est-il démarré ?
    sudo /home/azureuser/azagent/svc.sh status
  2. Connectivité réseau vers Azure DevOps :
    curl -I https://dev.azure.com
  3. 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 :

  1. Vérifier que le pool name dans azure-pipelines.yml est correct :
    pool:
    name: 'jit-azure-devops-agents' # Vérifier le nom exact
  2. 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 :

  1. Créer des templates Proxmox de vos agents configurés
  2. Cloner rapidement des nouveaux agents
  3. 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 (_work folders)
  • 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-restore dans 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