Skip to content

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

```ini title="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

```bash
# 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é ? bash sudo /home/azureuser/azagent/svc.sh status 2. Connectivité réseau vers Azure DevOps : bash curl -I https://dev.azure.com 3. Vérifier les logs : bash 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 : yaml 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

:::tip 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 :::

:::warning 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 :::

:::info 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 :::