DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

CI/CD & JenkinsLesson 5 / 1110 min readUpdated September 13, 2026

Jenkins CI/CD : installer, pipelines et Jenkinsfile (hub 2026)

À la fin de cette page hub, vous saurez pourquoi Jenkins reste pertinent en 2026, comment installer Jenkins sur Ubuntu 24.04 LTS (keyring apt moderne, OpenJDK 17), décrire l’architecture controller/agents, écrire un Jenkinsfile déclaratif (checkout → build → test → image Docker) et gérer les secrets sans les hard-coder — puis vous orienter dans le parcours Jenkins du site.

Niveau : Débutant → Intermédiaire · Temps estimé : 55–70 min · Versions cibles : Jenkins LTS récent (2.452+) · OpenJDK 17+ · Ubuntu 24.04 LTS · Docker Engine 27+ (agents) · Dernière vérification : 2026-09-11

Prérequis

  • [ ] Serveur ou VM Ubuntu 24.04 LTS (lab) : 4 Go RAM minimum, 2 vCPU, 20 Go disque
  • [ ] Accès sudo pour installer paquets et ouvrir le pare-feu
  • [ ] Notions Git (clone, branche main) — voir Git : contrôle de version distribué
  • [ ] (Recommandé) Docker Engine pour agents et docker build — hub Docker
  • [ ] (Optionnel) Maven pour le build Java de démo — Maven build tool
  • [ ] Coût estimé : 0 € en lab local / VM perso

Ce hub absorbe et enrichit le contenu live de /jenkins/ (install Ubuntu 24.04, Jenkinsfile, hardening, FAQ) en français pédagogique SEO. Les leçons sœurs détaillent introduction, install longue et syntaxe Jenkinsfile ; ici l’objectif est une page pilier menu.

Objectif : controller LTS joignable, Pipeline déclaratif versionné, checklist durcissement (UFW, credentials, agents) — flux reproductible dans Git.

Ce que nous allons construire

Hub Jenkins (menu CI/CD)
  ├── Pourquoi Jenkins en 2026 vs GitHub Actions / GitLab CI
  ├── Architecture : controller, agents, executors, plugins, credentials
  ├── Install rapide Ubuntu 24.04 (keyring, OpenJDK 17, systemctl, UFW)
  ├── Premier Pipeline déclaratif + Jenkinsfile (checkout/build/test/docker)
  ├── Agents Docker + secrets (credentials / withCredentials)
  ├── Erreurs fréquentes + FAQ (5)
  └── Carte du parcours → Docker / Kubernetes / Maven / Git / Ansible

(Schéma à remplacer par une image locale, alt : « Architecture Jenkins : controller, agents Docker et pipeline as code Jenkinsfile ».)

Étape 1 — Pourquoi Jenkins en 2026 (CI/CD et pipeline as code)

Jenkins est le serveur d’automatisation open source de référence pour la CI/CD : il orchestre builds, tests, scans et déploiements via des pipelines as code (Jenkinsfile versionné dans Git). En 2026, il reste massivement déployé grâce à son écosystème de plugins, à l’exécution self-hosted et à la maturité des pipelines déclaratifs.

Critère Jenkins GitHub Actions / GitLab CI
Hébergement Self-hosted (contrôle total) SaaS (+ runners self-hosted optionnels)
Forces Plugins, agents custom, multi-SCM UX native au forge, moins d’ops controller
Attention Maintenance plugins / controller Coût minutes, vendor lock-in
Pipeline as code Jenkinsfile déclaratif YAML workflows / .gitlab-ci.yml

Choisir Jenkins si agents custom, on-prem ou héritage fort. Préférer Actions/GitLab CI si l’équipe est 100 % SaaS. Les trois coexistent : l’essentiel reste le pipeline as code et des secrets hors dépôt.

Jenkins brille pour mélanger des outils (Maven, npm, Terraform, Ansible) sur agents labellisés, ou pour garder code/artefacts on-prem. Budgétez l’ops (LTS, plugins, backup $JENKINS_HOME). Les pages sœurs détaillent chaque brique.

Étape 2 — Architecture : controller, agents, executors, plugins

Élément Rôle
Controller UI, orchestration, plugins, file d’attente
Agent Nœud (VM/conteneur) qui exécute les stages
Executor Slot de concurrence (1 build ≈ 1 executor)
Plugin Git, Docker Pipeline, Credentials, Kubernetes…
Credentials Secrets chiffrés côté Jenkins (hors Jenkinsfile)
Pipeline Job défini par un Jenkinsfile (déclaratif recommandé)

Bonne pratique 2026 : 2–4 executors sur le controller ; builds lourds sur agents Docker ou pods Kubernetes (registry.k8s.io avec le plugin K8s). Évitez Maven/Docker intensifs sur le controller en production.

Controller = file d’attente, historique, Credentials ; agents = JDK/Maven/Docker. Label (jdk17, docker) via agent { label '...' }. Sur K8s : pods éphémères, controller stable.

Étape 3 — Installer Jenkins rapidement sur Ubuntu 24.04 LTS

Mettez à jour le système, puis ajoutez le dépôt officiel avec keyring (méthode moderne — pas apt-key) :

sudo apt update && sudo apt upgrade -y
sudo apt install -y wget gnupg openjdk-17-jre-headless

sudo mkdir -p /etc/apt/keyrings
wget -O- https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key 
  | sudo tee /etc/apt/keyrings/jenkins-keyring.asc > /dev/null

echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc] 
  https://pkg.jenkins.io/debian-stable binary/" 
  | sudo tee /etc/apt/sources.list.d/jenkins.list

sudo apt update
sudo apt install -y jenkins

Sortie attendue : paquets installés sans erreur ; dépôt debian-stable (ligne LTS).

sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo systemctl status jenkins --no-pager
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Attendu : Active: active (running) et une chaîne ~32 caractères. Ouvrez http://VOTRE_IP:8080, collez le mot de passe, installez les plugins suggérés, créez le compte admin. Ne laissez pas ce fichier password exposé après setup.

Durcissement minimal

sudo ufw allow OpenSSH
sudo ufw allow 8080/tcp
sudo ufw enable
sudo ufw status

Attendu : 22/tcp et 8080/tcp en ALLOW. En prod : reverse proxy HTTPS, SSO/OIDC, restriction IP. Conservez l’utilisateur système jenkins (jamais root).

Après le wizard : version LTS (About), plugins avec prudence, backup $JENKINS_HOME. Lab = snapshot VM ; équipe = URL, admin, systemctl restart.

Détail wizard : jenkins-installation · concepts : jenkins-introduction.

Étape 4 — Premier Pipeline déclaratif et Jenkinsfile

Placez un Jenkinsfile à la racine du dépôt :

pipeline {
    agent any
    parameters {
        choice(name: 'ENV', choices: ['dev', 'staging', 'prod'],
               description: 'Environnement cible')
    }
    environment {
        DOCKER_REGISTRY = 'registry.example.com'
        APP_IMAGE = "${DOCKER_REGISTRY}/demo-app:${env.BUILD_NUMBER}"
    }
    stages {
        stage('Checkout') {
            steps { checkout scm }
        }
        stage('Build') {
            steps { sh 'mvn -B clean package -DskipTests' }
        }
        stage('Test') {
            steps { sh 'mvn -B test' }
        }
        stage('Docker Build') {
            steps {
                sh "docker build -t ${APP_IMAGE} ."
                echo "Image ${params.ENV} : ${APP_IMAGE}"
            }
        }
    }
    post { always { cleanWs() } }
}

Dans Jenkins : Nouveau job → Pipeline → script depuis le SCM (Pipeline script from SCM) → URL Git + credentials → chemin Jenkinsfile. Premier run : clone → Maven → tests → docker build. Paramètres via Build with Parameters (${params.ENV}, ${env.BUILD_NUMBER}).

Pipeline from SCM versionne le Jenkinsfile (PR, rollback). cleanWs() évite d’accumuler des workspaces. Échec Maven : corrigez localement (mvn -B test) puis relancez. Paramètres ENV = dev/staging/prod sans dupliquer le job.

Approfondir : jenkinsfile, jenkins-tutorials. Build Java → Maven ; image → Docker puis Kubernetes.

Étape 5 — Agents Docker et secrets (jamais en clair)

Agents Docker

Préférez une image agent plutôt que d’installer tous les outils sur le controller :

pipeline {
    agent {
        docker {
            image 'maven:3.9-eclipse-temurin-17'
            // Lab : socket Docker = accès privilégié hôte — à restreindre en prod
            args '-v /var/run/docker.sock:/var/run/docker.sock'
        }
    }
    stages {
        stage('Build') {
            steps { sh 'mvn -B -version && mvn -B clean package' }
        }
    }
}

Agents durables : image jenkins/inbound-agent, connexion inbound TCP (port 50000), labels (docker, jdk17). Sur Kubernetes : pods éphémères via le plugin (images registry.k8s.io si besoin).

Le socket Docker (/var/run/docker.sock) est pratique en lab mais quasi-root sur l’hôte : en prod préférez un builder contrôlé (Kaniko/Buildah, daemon distant). Documentez CPU/RAM des agents pour limiter la contention.

Credentials et withCredentials

Jamais de mot de passe, token ou clé en dur dans le Jenkinsfile ou les logs. Créez une entrée Manage Jenkins → Credentials, puis :

stage('Push registry') {
    steps {
        withCredentials([usernamePassword(
            credentialsId: 'registry-bot',
            usernameVariable: 'REG_USER',
            passwordVariable: 'REG_PASS'
        )]) {
            sh '''
              echo "$REG_PASS" | docker login -u "$REG_USER" --password-stdin registry.example.com
              docker push "$APP_IMAGE"
            '''
        }
    }
}

Alternative : credentials('id-ssh-git') / sshagent. Rotation = mise à jour du magasin Jenkins, sans commit Git.

Bonnes habitudes : credentialsId stables (registry-bot, git-readonly), comptes de service, scopes minimaux. Vérifiez que les logs ne fuient pas le secret (évitez les echo maladroits) — testez sur un job jetable avant la prod.

Étape 6 — Erreurs fréquentes

Symptôme Cause probable Correction
Cannot run program "docker" jenkins hors groupe docker sudo usermod -aG docker jenkins puis restart service
Échec Checkout (auth Git) Credentials SCM manquants PAT HTTPS ou clé SSH dans le store ; tester git ls-remote
Permission denied /var/lib/jenkins Lancement en root / droits cassés Utilisateur jenkins ; chown -R jenkins:jenkins
OutOfMemoryError / heap Builds lourds sur controller JAVA_OPTS="-Xmx4g" dans /etc/default/jenkins ; agents
Port 8080 inaccessible UFW / SG / service down systemctl status jenkins ; ufw allow 8080/tcp
Pipeline rouge après upgrade Plugin incompatible Notes LTS ; staging ; apt upgrade jenkins + restart

Étape 7 — Carte du parcours Jenkins sur le site

Ordre Page Rôle
1 (hub) jenkins (cette page) Pilier menu : install, architecture, Jenkinsfile, secrets
2 jenkins-introduction Concepts CI/CD et vocabulaire
3 jenkins-installation Install détaillée / options
4 jenkinsfile Syntaxe déclarative approfondie
5 jenkins-tutorials Labs et enchaînements pratiques

Suite DevOps : Git → Maven → Docker → Jenkins → Kubernetes → Ansible. Un même commit déclenche build + image + (plus tard) déploiement.

Hub menu : débutants → introduction → installation → Jenkinsfile ; forge Azure → Jenkins with Azure Repos. Objectif : pipeline lisible, sécurisé, rejouable — pas une forêt de plugins.

FAQ

1. Comment mettre à jour Jenkins sur Ubuntu 24.04 ?
sudo apt update && sudo apt upgrade jenkins, puis sudo systemctl restart jenkins. Vérifiez Manage Jenkins → About. Lisez les notes LTS ; en équipe, validez d’abord sur un staging (mêmes Jenkinsfile / agents).

2. Puis-je exécuter des agents Jenkins dans des conteneurs Docker ?
Oui. Image jenkins/inbound-agent (ou agent Docker Pipeline éphémère). Connexion inbound souvent sur le port 50000. Sur cluster, préférez le plugin Kubernetes et des pods jetables.

3. Quelle est la bonne façon de stocker les secrets dans un Jenkinsfile ?
Ne jamais hard-coder. Magasin Credentials + credentials() / withCredentials au runtime. Préférez des tokens à durée limitée (PAT, robot registry) et documentez qui peut les faire tourner.

4. Combien d’executors configurer sur le controller ?
2 à 4 maximum pour l’UI et l’orchestration. Les builds CPU/RAM intensifs vont sur des agents dédiés ou pods.

5. Jenkins parle-t-il nativement à Kubernetes 1.31+ ?
Oui via le Kubernetes plugin : pods agents, images pointant vers registry.k8s.io quand vous utilisez des composants officiels. Combinez ensuite avec Helm / GitOps pour le CD.

Points clés à retenir

  • Jenkins reste un pilier CI/CD self-hosted en 2026 grâce aux plugins et au Jenkinsfile versionné.
  • Architecture saine : controller léger, agents (Docker/K8s) pour le travail lourd, credentials hors dépôt.
  • Install Ubuntu 24.04 : OpenJDK 17+, dépôt debian-stable avec keyring (pas apt-key), systemctl, UFW 8080.
  • Premier pipeline : Checkout → Build → Test → Docker ; paramètres + environment.
  • Secrets : withCredentials / credentials() uniquement — zéro secret en clair dans Git ou les logs.
  • Ops : backup $JENKINS_HOME, LTS + plugins maîtrisés, HTTPS (reverse proxy) hors lab local.

Sauvegarder le controller et tenir le quotidien

Une install Jenkins qui « tourne » n’est pas encore un socle d’équipe. Trois habitudes séparent le lab du contrôleur à montrer.

Sauvegardez le répertoire maison du controller. Jobs, credentials chiffrés, plugins et historique vivent là. Sur Ubuntu 24.04, une archive nocturne ou un snapshot de disque suffit en lab ; en équipe, versionnez aussi les jobs (Job DSL ou configuration as code) pour ne pas dépendre d’un seul fichier XML. Testez la restauration une fois : un backup jamais relu est un talisman.

Ensuite, préférez le webhook du dépôt au poll. Un job qui interroge Git toutes les minutes charge le controller et retarde le feedback. GitHub, GitLab ou Azure Repos poussent un événement ; Jenkins clone et enchaîne. Moins de charge, traces plus claires.

Enfin, traitez les plugins comme du code de production : liste minimale, notes LTS lues, montée d’abord sur un staging. Documentez pour l’équipe : relance du controller, credentials registry, qui promeut vers la production.

Ces trois réflexes complètent l’install Ubuntu, le pipeline déclaratif et les secrets hors dépôt — pont vers Docker, Maven et le Capstone.

Pour aller plus loin

  • Documentation officielle Jenkins : installation Linux, syntaxe Pipeline, Docker with Pipeline
  • Durcir : TLS (reverse proxy), SSO, backup $JENKINS_HOME, plugins minimaux
  • Multibranch : un Jenkinsfile détecté par branche/PR
  • Suite : SonarQube, Kubernetes, Ansible
  • Observabilité : archiver JUnit / couverture, alerter sur les jobs rouges chroniques

Maillage série DevOps (CTA)

← Connexe Git · Maven
→ Suite Jenkins Introduction · Installation · Jenkinsfile · Tutorials
Aussi Docker · Kubernetes · Ansible
Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *