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

TypeFonctionnementUsage recommandé
SSHController se connecte à l’agent via SSHAgents Linux persistants
JNLP / TCP InboundL’agent initie la connexion vers le ControllerAgents Windows, DMZ, agents derrière NAT
DockerUn container est créé pour chaque buildIsolation, environnements éphémères
KubernetesUn Pod est créé par build, détruit aprèsScale dynamique, cloud-native
Built-inExé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 none

Bonnes pratiques de labeling :

DimensionExemples
OSlinux, windows, macos
Capacitésdocker, maven, node, python
Environnementprod, qa, staging
Ressourceshigh-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