Git + CI/CD : automatiser son workflow DevOps

Image

Git + CI/CD : automatiser son workflow DevOps avec Jenkins

Temps de lecture : 10 min | Niveau : Intermédiaire | Mis à jour : Février 2026

Git et CI/CD sont deux piliers du DevOps moderne. Séparément, chacun apporte une valeur considérable. Ensemble, ils créent un workflow automatisé où chaque modification du code déclenche un processus complet de validation et de déploiement. C'est précisément cette combinaison qui permet aux équipes professionnelles de livrer du logiciel rapidement et de manière fiable.

Pourquoi combiner Git et CI/CD ?

Git seul vous permet de versionner votre code, de travailler en équipe et de gérer des branches. Mais sans CI/CD, chaque déploiement reste une opération manuelle : vous compilez sur votre machine, vous testez à la main, vous déployez via FTP ou SSH. C'est lent, risqué et source d'erreurs.

En ajoutant un serveur CI/CD comme Jenkins, chaque git push déclenche automatiquement un pipeline qui compile, teste et déploie. L'intervention humaine se limite à écrire du code et à le pousser sur Git. Tout le reste est automatisé.

Git seul Git + Jenkins (CI/CD)
Code versionné, branches gérées Code versionné + pipeline automatisé
Build et tests manuels Build et tests automatiques à chaque push
Déploiement manuel (SSH, FTP, copie) Déploiement automatisé sur staging/production
Erreurs détectées tard (en production) Erreurs détectées immédiatement (avant production)
Pas de traçabilité du déploiement Historique complet de chaque build et déploiement

Le workflow complet : du commit au déploiement

Voici le workflow type d'une équipe utilisant Git + Jenkins :

1. Code

Le dev écrit du code sur sa branche

2. Push

git push vers le dépôt distant

3. Webhook

GitHub notifie Jenkins

4. Build

Jenkins compile le projet

5. Test

Tests automatisés

6. Deploy

Déploiement auto

Le principe fondamental : le développeur ne s'occupe que des étapes 1 et 2 (coder et pousser). Tout le reste est automatisé par Jenkins. C'est ce qui rend le CI/CD si puissant : il libère les développeurs des tâches répétitives.

Webhook Git → Jenkins : déclencher automatiquement

Un webhook est une notification HTTP envoyée par GitHub (ou GitLab) à Jenkins chaque fois qu'un événement se produit dans le dépôt (push, pull request, merge).

Configuration d'un webhook GitHub → Jenkins

  1. Dans GitHub : Settings → Webhooks → Add webhook
  2. Payload URL : http://votre-jenkins:8080/github-webhook/
  3. Content type : application/json
  4. Événements : sélectionnez « Just the push event »
  5. Dans Jenkins : dans la configuration du pipeline, cochez « GitHub hook trigger for GITScm polling »

Désormais, à chaque git push, GitHub envoie une notification à Jenkins, qui lance immédiatement le pipeline. Le délai entre le push et le démarrage du build est de quelques secondes.

Alternative : SCM Polling. Si vous ne pouvez pas configurer de webhook (Jenkins derrière un pare-feu), Jenkins peut vérifier le dépôt Git à intervalles réguliers (ex : toutes les 5 minutes) avec la syntaxe cron H/5 * * * *. Le webhook reste cependant la méthode recommandée.

Le Jenkinsfile dans le repo : Pipeline as Code

La bonne pratique est de stocker le Jenkinsfile à la racine du dépôt Git. Le pipeline vit avec le code. C'est le concept de Pipeline as Code.

Exemple de Jenkinsfile pour un projet Node.js

pipeline {
    agent any

    environment {
        NODE_ENV = 'production'
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Install') {
            steps {
                sh 'npm ci'
            }
        }

        stage('Lint') {
            steps {
                sh 'npm run lint'
            }
        }

        stage('Test') {
            steps {
                sh 'npm test'
            }
        }

        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }

        stage('Deploy to Staging') {
            when {
                branch 'develop'
            }
            steps {
                sh './deploy.sh staging'
            }
        }

        stage('Deploy to Production') {
            when {
                branch 'main'
            }
            steps {
                sh './deploy.sh production'
            }
        }
    }

    post {
        failure {
            echo 'Le pipeline a échoué. Vérifiez les logs.'
        }
        success {
            echo 'Déploiement réussi.'
        }
    }
}
Points clés : la directive when { branch 'main' } permet de conditionner le déploiement à la branche. Le stage « Deploy to Production » ne s'exécute que sur la branche main. Le stage « Deploy to Staging » ne s'exécute que sur develop. C'est ainsi qu'on sépare les environnements.

Stratégie de branches pour le CI/CD

La manière dont vous organisez vos branches Git impacte directement votre pipeline CI/CD. Voici le modèle le plus courant :

Branche Rôle Action Jenkins
feature/* Développement de nouvelles fonctionnalités Build + tests unitaires
develop Intégration des features terminées Build + tests + déploiement staging
main (ou master) Code stable prêt pour la production Build + tests + déploiement production
hotfix/* Corrections urgentes en production Build + tests + déploiement rapide

Avec un pipeline multibranches Jenkins, chaque branche du dépôt qui contient un Jenkinsfile obtient automatiquement son propre pipeline. Jenkins détecte les nouvelles branches et crée les jobs correspondants.

Docker dans le pipeline : conteneuriser le build

Docker s'intègre naturellement dans un pipeline Jenkins. Au lieu d'installer les dépendances sur le serveur Jenkins, vous exécutez chaque étape dans un conteneur dédié :

pipeline {
    agent {
        docker {
            image 'node:20-alpine'
        }
    }

    stages {
        stage('Install') {
            steps {
                sh 'npm ci'
            }
        }

        stage('Test') {
            steps {
                sh 'npm test'
            }
        }

        stage('Build Docker Image') {
            steps {
                sh 'docker build -t mon-app:latest .'
            }
        }
    }
}

Avantage : l'environnement de build est reproductible et isolé. Pas de conflit entre les versions de Node.js, Python ou Java installées sur le serveur. Chaque pipeline utilise exactement l'image Docker dont il a besoin.

Bonnes pratiques du workflow Git + CI/CD

  • Committez souvent, en petits morceaux. Des commits fréquents facilitent l'identification des bugs et réduisent les conflits de merge.
  • Utilisez les merge requests (ou pull requests). Elles déclenchent le pipeline sur la branche avant le merge, ce qui garantit que le code est valide avant d'intégrer main.
  • Protégez la branche main. Interdisez le push direct et exigez un pipeline vert avant le merge.
  • Stockez le Jenkinsfile dans Git. Pipeline as Code = traçabilité, réversibilité, partage.
  • Séparez les environnements. Staging pour tester, production pour livrer. Utilisez when { branch } dans le Jenkinsfile.
  • Ne stockez jamais de secrets dans Git. Utilisez les credentials Jenkins ou un vault (HashiCorp Vault, AWS Secrets Manager).
  • Monitorez vos builds. Configurez des notifications (Slack, email) pour être alerté en cas d'échec.

Maîtrisez Git et Jenkins

Pour mettre en place ce workflow complet, deux formations complémentaires sont disponibles dans le catalogue Lenidit :

Formation Git

Versionner votre code, collaborer en équipe, maîtriser les branches et les merge requests.

Formation Git

Formation Jenkins

Créer des pipelines CI/CD, écrire des Jenkinsfile, automatiser vos déploiements.

Formation Jenkins

19€/mois pour l'accès à l'ensemble du catalogue (ou 159€/an). Attestation de réussite incluse.

FAQ

Peut-on utiliser GitLab CI à la place de Jenkins ?
Oui, GitLab CI est une alternative populaire à Jenkins, intégrée directement dans GitLab. Le workflow Git + CI/CD reste le même (push → pipeline → deploy). Le choix dépend de votre plateforme Git et de vos besoins en flexibilité. Jenkins est plus flexible et auto-hébergé, GitLab CI est plus simple si vous êtes déjà sur GitLab.
Faut-il un webhook pour chaque dépôt Git ?
Oui, chaque dépôt Git qui doit déclencher un pipeline Jenkins nécessite son propre webhook. Le webhook est configuré dans les paramètres du dépôt et pointe vers votre serveur Jenkins. Avec un pipeline multibranches, un seul job Jenkins gère toutes les branches du dépôt.
Comment gérer les secrets (tokens, mots de passe) dans le pipeline ?
Ne stockez jamais de secrets dans le Jenkinsfile ou dans Git. Utilisez le gestionnaire de credentials de Jenkins (Manage Jenkins → Manage Credentials) et référencez-les dans le pipeline avec credentials('mon-secret'). Pour les projets plus avancés, un vault dédié (HashiCorp Vault) est recommandé.
Qu'est-ce qu'un pipeline multibranches ?
Un pipeline multibranches est un type de job Jenkins qui scanne automatiquement un dépôt Git et crée un pipeline pour chaque branche contenant un Jenkinsfile. C'est la configuration recommandée en équipe : chaque développeur travaille sur sa branche et dispose automatiquement de son propre pipeline.
Docker est-il obligatoire dans un pipeline Jenkins ?
Non, Docker n'est pas obligatoire. Vous pouvez exécuter les commandes directement sur le serveur Jenkins. Cependant, Docker est fortement recommandé car il isole l'environnement de build et garantit la reproductibilité. Notre formation Docker vous apprend à conteneuriser vos applications.