Les agents (nodes) sont les machines qui exécutent les builds. Jenkins supporte plusieurs protocoles de connexion et modes d’approvisionnement (statique ou dynamique).
Types de connexion
| Type | Fonctionnement | Usage recommandé |
|---|---|---|
| SSH | Controller se connecte à l’agent via SSH | Agents Linux persistants |
| JNLP / TCP Inbound | L’agent initie la connexion vers le Controller | Agents Windows, DMZ, agents derrière NAT |
| Docker | Un container est créé pour chaque build | Isolation, environnements éphémères |
| Kubernetes | Un Pod est créé par build, détruit après | Scale dynamique, cloud-native |
| Built-in | Exécution directement sur le Controller | À éviter en production |
Configurer un agent SSH
Manage Jenkins → Nodes → New Node
├── Name : agent-linux-01
├── # Executors : 4
├── Remote root : /home/jenkins/workspace
├── Labels : linux docker maven
└── Launch via SSH
├── Host : 10.0.1.50
└── Credentials : jenkins-ssh-key (clé privée dans le credentials store)
Agents dynamiques — Docker
Via le plugin Docker Plugin, Jenkins crée un container par build :
pipeline {
agent {
docker {
image 'maven:3.9-eclipse-temurin-17'
args '-v /root/.m2:/root/.m2' // cache Maven persistant
}
}
stages {
stage('Build') {
steps { sh 'mvn clean package' }
}
}
}Agents dynamiques — Kubernetes
Via le plugin Kubernetes Plugin, Jenkins crée un Pod par build. C’est l’approche recommandée pour les environnements cloud :
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.9-eclipse-temurin-17
command: ['sleep', '9999']
- name: docker
image: docker:24-dind
securityContext:
privileged: true
"""
defaultContainer 'maven'
}
}
stages {
stage('Build') {
steps { sh 'mvn clean package' }
}
stage('Docker Push') {
steps {
container('docker') {
sh 'docker build -t mon-image:${BUILD_NUMBER} .'
}
}
}
}
}Labels — cibler le bon agent
Les labels permettent de router les builds vers les bons agents :
// Cibler un agent avec les labels "linux" ET "docker"
agent { label 'linux && docker' }
// Cibler un agent avec "gpu" OU "cuda"
agent { label 'gpu || cuda' }
// Désactiver l'agent pour ce stage (exécution sur le Controller)
agent noneBonnes pratiques de labeling :
| Dimension | Exemples |
|---|---|
| OS | linux, windows, macos |
| Capacités | docker, maven, node, python |
| Environnement | prod, qa, staging |
| Ressources | high-mem, gpu |
Scaling horizontal — agents EC2
Avec le plugin EC2 Plugin, Jenkins démarre des instances EC2 à la demande et les arrête quand la queue est vide :
Build en attente → Pas d'executor libre → EC2 Plugin → Lance une instance AMI
Instance prête → Exécute le build → Inactivité > 30 min → Terminate l'instance
En relation avec
- Architecture — Vue d’ensemble — hub architecture
- Composants Jenkins — rôle des agents dans l’architecture globale
- Jenkins sur AWS (IaC + JCasC) — provisionnement d’agents EC2 avec Terraform