Introduction à Jenkins
Qu'est-ce que Jenkins ?
Jenkins est un serveur d'automatisation open source écrit en Java. Il permet d'automatiser les tâches répétitives du cycle de développement logiciel :
- Build : Compilation du code
- Test : Exécution des tests automatisés
- Analyse : Qualité du code (SonarQube, linting)
- Déploiement : Mise en production
CI/CD avec Jenkins
Intégration Continue (CI)
Déploiement Continu (CD)
Architecture
Composants principaux
Controller (Master)
Le controller Jenkins :
- Gère l'interface web
- Planifie les builds
- Stocke la configuration
- Distribue les tâches aux agents
Agents (Slaves)
Les agents exécutent les builds :
- Peuvent être sur différentes plateformes
- Se connectent au controller via JNLP ou SSH
- Peuvent être statiques ou dynamiques (cloud)
Concepts clés
Job / Projet
Un job est une tâche automatisée. Types de jobs :
| Type | Description | Usage |
|---|---|---|
| Freestyle | Configuration via UI | Jobs simples |
| Pipeline | Code Groovy (Jenkinsfile) | CI/CD complexes |
| Multibranch | Un pipeline par branche | Projets Git |
| Folder | Organisation des jobs | Structure |
Build
Un build est une exécution d'un job. Chaque build a :
- Un numéro unique (#1, #2, ...)
- Un statut (Success, Failure, Unstable, Aborted)
- Des logs
- Des artifacts (optionnel)
Workspace
Le workspace est le répertoire de travail où le code est cloné et où le build s'exécute.
/var/jenkins_home/workspace/
├── my-project/
│ ├── src/
│ ├── pom.xml
│ └── target/
└── another-project/
Artifact
Un artifact est un fichier produit par un build :
- JAR/WAR Java
- Binaires compilés
- Images Docker
- Rapports de test
Jenkins vs autres outils CI/CD
| Aspect | Jenkins | GitHub Actions | GitLab CI | CircleCI |
|---|---|---|---|---|
| Hébergement | Self-hosted | Cloud | Cloud/Self | Cloud |
| Configuration | Jenkinsfile/UI | YAML | YAML | YAML |
| Plugins | 1800+ | Actions | Intégré | Orbs |
| Coût | Gratuit | Freemium | Freemium | Payant |
| Courbe | Moyenne | Facile | Facile | Facile |
| Flexibilité | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
Quand choisir Jenkins ?
- Infrastructure on-premise requise
- Besoin de personnalisation extrême
- Intégrations spécifiques (legacy)
- Contrôle total sur l'environnement
Workflow typique
Terminologie
| Terme | Description |
|---|---|
| Controller | Serveur principal Jenkins |
| Agent | Noeud d'exécution des builds |
| Job | Tâche automatisée |
| Build | Exécution d'un job |
| Pipeline | Workflow CI/CD en code |
| Stage | Étape d'un pipeline |
| Step | Action dans un stage |
| Workspace | Répertoire de travail |
| Artifact | Fichier produit |
| Plugin | Extension Jenkins |
Avantages de Jenkins
1. Open Source et gratuit
# Pas de licence à payer
# Communauté active
# Documentation abondante
2. Extensibilité
Plus de 1800 plugins pour :
- Intégrations SCM (Git, SVN, Mercurial)
- Build tools (Maven, Gradle, npm)
- Cloud (AWS, Azure, GCP)
- Containers (Docker, Kubernetes)
- Notifications (Slack, Email, Teams)
- Qualité (SonarQube, Checkmarx)
3. Pipeline as Code
// Jenkinsfile versionné avec le code
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'kubectl apply -f k8s/'
}
}
}
}
4. Scalabilité
- Architecture distribuée master/agents
- Agents dynamiques (Kubernetes, Docker, EC2)
- Parallélisation des builds
Limites de Jenkins
| Limite | Mitigation |
|---|---|
| Interface datée | Blue Ocean plugin |
| Configuration complexe | Jenkins Configuration as Code |
| Maintenance serveur | Jenkins sur Kubernetes |
| Plugins parfois instables | Versions LTS |
| Groovy learning curve | Shared Libraries |
Résumé
- Jenkins est un serveur d'automatisation CI/CD open source
- Architecture master/agent pour la scalabilité
- Pipeline as Code avec Jenkinsfile
- Écosystème riche de plugins
- Idéal pour les environnements on-premise