Aller au contenu

Main slides

Objectifs pédagogiques

  • Comprendre les enjeux de la gestion automatisée des dépendances
  • Configurer et utiliser Renovate en mode local
  • Déployer Renovate via une solution SaaS
  • Installer et configurer Renovate en self-hosted avec Docker Compose
  • Installer et configurer Renovate en self-hosted avec Kubernetes

Introduction à Renovate

Qu'est-ce que Renovate ?

Renovate est un outil open-source développé par Mend (anciennement WhiteSource) qui automatise la mise à jour des dépendances dans vos projets logiciels

Il analyse votre code, détecte les dépendances obsolètes et crée automatiquement des Pull Requests (PR) ou Merge Requests (MR) pour les mettre à jour


Pourquoi automatiser les mises à jour ?

Problématiques sans automatisation :

  • Dépendances obsolètes accumulent des vulnérabilités de sécurité
  • Mise à jour manuelle chronophage et sujette aux oublis
  • Difficultés de migration quand les versions sont trop anciennes
  • Manque de visibilité sur l'état des dépendances

Avantages de Renovate :

  • Détection automatique des nouvelles versions
  • Création de PR/MR groupées ou individuelles
  • Tests automatiques via CI/CD avant merge
  • Support multi-langages (npm, Maven, pip, Go, Docker, etc.)
  • Configuration hautement personnalisable

Architecture et fonctionnement

Renovate fonctionne selon le principe suivant :

  • Scan : Analyse les fichiers de dépendances (package.json, pom.xml, requirements.txt, etc.)
  • Détection : Interroge les registres (npm, Maven Central, PyPI, etc.) pour trouver les nouvelles versions
  • Validation : Vérifie les contraintes de version et les règles configurées
  • Création de PR/MR : Génère des propositions de mise à jour
  • Tests : Déclenche la CI/CD pour valider les changements

Les trois modes de déploiement

Mode Avantages Inconvénients Cas d'usage
Local Rapide à tester, pas d'infrastructure Manuel, pas d'automatisation continue Développement, tests, debugging
SaaS Aucune infrastructure à gérer, gratuit pour l'open-source Dépendance externe, limitations potentielles Projets publics, petites équipes
Self-hosted Contrôle total, données internes Infrastructure à maintenir Entreprises, projets privés sensibles

Renovate == Dependabot ?

Renovate et Dependabot sont tous deux des outils d'automatisation des mises à jour de dépendances, mais ils se distinguent principalement par leur flexibilité (Renovate) et leur intégration native (Dependabot)

Caractéristique Renovate Dependabot
Plateformes Supportées Multiples (GitHub, GitLab, Bitbucket, Azure DevOps, Self-Hosted) Principalement GitHub (intégré nativement)
Niveau de Configuration Extensif (fichiers renovate.json, presets partagés, expressions cron pour la planification) Limité (fichier dependabot.yml, planification par intervalle basique)
Regroupement des Mises à Jour (Grouping) Avancé et intelligent (regroupement par fonctionnalité, type ou via group:monorepos pour réduire le bruit) Limité/Basique (souvent une PR par dépendance)
Support Monorepo Excellent (conçu pour gérer les dépendances partagées) Limité (peut générer de nombreuses PR redondantes)
Tableau de Bord (Dashboard) Oui (Dependency Dashboard via une issue dédiée) Non (uniquement via l'onglet Sécurité/Insights de GitHub)
Auto-Merge Hautement configurable (basé sur le type de mise à jour, les résultats des tests CI, etc) Basique/Limité
Nombre de Package Managers Très large (30+), incluant Dockerfile, Kubernetes, etc Plus restreint (environ 14)
Alertes de Sécurité Prises en charge via l'API Dependabot Excellent et intégré (natif GitHub)

Renovate == Dependabot ?

Choisissez Dependabot si :

  • Vous utilisez exclusivement GitHub et n'avez pas l'intention d'en changer
  • Votre projet est simple (pas de monorepo complexe)
  • Vous privilégiez la simplicité et l'intégration native (activation en un seul clic)
  • Votre priorité principale est la détection rapide des vulnérabilités (sécurité)

Choisissez Renovate si :

  • Vous utilisez GitLab, Bitbucket, Azure DevOps ou avez besoin d'une solution self-hosted
  • Vous gérez des monorepos ou des projets avec des dépendances complexes et partagées
  • Vous souhaitez réduire le nombre de Pull Requests en regroupant intelligemment les mises à jour
  • Vous avez besoin d'une configuration très précise (planification avancée par cron, règles spécifiques par dépendance, etc)

Utilisation et Onboarding

Le processus de mise en route de Renovate :

  • PR d'onboarding : Renovate propose une première Pull Request contenant un fichier renovate.json minimal
  • Validation : Une fois la PR fusionnée, Renovate commence à analyser le dépôt
  • Dependency Dashboard : Création d'une issue servant de tableau de bord interactif pour suivre et piloter les mises à jour

Configuration de base

Exemple de fichier renovate.json standard :

{
  "extends": ["config:recommended"],
  "labels": ["dependencies"],
  "timezone": "Europe/Paris"
}

Options clés : - extends : Permet d'hériter de configurations prédéfinies (presets) - labels : Ajoute automatiquement des tags sur vos Pull Requests - timezone : Aligne les horaires de planification sur votre fuseau horaire


Le Dependency Dashboard

Une interface directement dans vos tickets (Issues) :

  • Centralise toutes les mises à jour détectées et en attente
  • Permet de forcer manuellement la création d'une Pull Request
  • Permet de relancer une mise à jour fermée ou en échec
  • Offre une vue claire aux équipes sans encombrer la liste des PRs

Workflow mensuel de mise à jour

Objectif : Réduire le bruit et la fatigue des alertes

  • Planification : Exécuter Renovate une fois par mois
  • Regroupement (Grouping) : Regrouper toutes les mises à jour mineures et correctifs en une seule PR
  • Validation automatique (Automerge) : Fusionner automatiquement les mises à jour de développement (comme les devDependencies) validées par la CI
  • Approbation manuelle : Demander une validation explicite sur le dashboard pour les mises à jour majeures

Exemple de configuration mensuelle

Fichier renovate.json optimisé pour une mise à jour mensuelle :

{
  "extends": ["config:recommended"],
  "schedule": ["before 5am on the first day of the month"],
  "timezone": "Europe/Paris",
  "dependencyDashboardApproval": true,
  "packageRules": [
    {
      "matchUpdateTypes": ["minor", "patch"],
      "groupName": "All non-major dependencies",
      "automerge": true
    },
    {
      "matchDepTypes": ["devDependencies"],
      "automerge": true
    },
    {
      "matchUpdateTypes": ["major"],
      "dependencyDashboardApproval": true
    }
  ]
}

Déploiement et modes d'exécution

1. CLI Renovate (utilisation ponctuelle) - Lancement manuel en local via Docker (docker run renovate/renovate) ou npx renovate - Idéal pour tester une configuration ou forcer une mise à jour immédiate

2. CLI en Job planifié (CI/CD ou Cron) - Exécution périodique via un pipeline (GitLab CI, GitHub Actions) ou un CronJob Kubernetes - Pas d'infrastructure persistante à maintenir (le job tourne et s'arrête)

3. Mend Renovate Community Edition (serveur web) - Version auto-hébergée complète fonctionnant sous forme de service continu (Docker Compose ou Kubernetes) - Réagit instantanément aux événements utilisateur grâce aux webhooks (comme vu en TP)