GitOps & CI/CD

Renovate Bot

Automatisation des mises à jour de dépendances - Docker, Helm, npm, Go, Python, Terraform. Ouvre des PRs configurables, auto-merge, groupement. AGPL-3.0, Mend.

Renovate est un outil d'automatisation des mises à jour de dépendances. Il scanne les fichiers de configuration d'un dépôt (Dockerfile, docker-compose.yml, Chart.yaml, package.json, go.mod, requirements.txt, Terraform, etc.), détecte les versions obsolètes et ouvre des Pull Requests avec les mises à jour. Il supporte des dizaines de gestionnaires de packages et peut être auto-hébergé via Docker ou déployé comme GitHub App/GitLab bot. La configuration se fait via un fichier renovate.json dans le dépôt.


Informations essentielles

Origine : Mend (ex-WhiteSource)  ·  Licence : AGPL-3.0  ·  Architectures : x86_64, ARM64

Liens : Documentation  ·  GitHub  ·  Releases

Support : Maintenu activement par Mend. Version hébergée gratuite sur GitHub App (app.renovatebot.com).

Stack par défaut

ComposantValeur
LangageTypeScript / Node.js
DéploiementDocker auto-hébergé ou GitHub App hébergée
Image Dockerghcr.io/renovatebot/renovate
Configrenovate.json à la racine du dépôt
ManagersDocker, Helm, npm, pip, Go, Maven, Gradle, Terraform, Ansible, Flux, ArgoCD...

Prérequis

RessourceValeur
Token SCMGitHub token, GitLab token, ou Gitea token avec accès dépôts
Docker (auto-hébergé)Pour exécuter le conteneur Renovate
renovate.jsonFichier de config dans chaque dépôt à gérer

Option 1 - GitHub App hébergée (le plus simple)

  1. Aller sur https://github.com/apps/renovate
  2. Installer l'app sur votre compte ou organisation
  3. Sélectionner les dépôts à gérer
  4. Renovate ouvrira automatiquement une PR "Configure Renovate" avec un renovate.json de départ

Aucune infrastructure à gérer.


Option 2 - Auto-hébergement Docker

# Exécution unique sur un dépôt
docker run --rm \
  -e RENOVATE_TOKEN=ghp_xxxxxxxxxxxx \
  -e LOG_LEVEL=info \
  ghcr.io/renovatebot/renovate \
  mon-org/mon-repo

Docker Compose avec planification

# docker-compose.yml
services:
  renovate:
    image: ghcr.io/renovatebot/renovate:latest
    environment:
      - RENOVATE_TOKEN=${GITHUB_TOKEN}
      - RENOVATE_REPOSITORIES=mon-org/repo1,mon-org/repo2
      - LOG_LEVEL=info
    restart: "no"    # Exécution unique, à déclencher via cron

Déclencher via cron sur l'hôte :

# Exécuter Renovate toutes les heures
0 * * * * docker compose -f /opt/renovate/docker-compose.yml run --rm renovate

Avec un fichier de configuration global

// config.js (monté dans le conteneur)
module.exports = {
  platform: 'github',
  token: process.env.RENOVATE_TOKEN,
  repositories: [
    'mon-org/repo1',
    'mon-org/repo2',
  ],
  onboarding: true,
  requireConfig: 'optional',
};
docker run --rm \
  -v $(pwd)/config.js:/usr/src/app/config.js \
  -e RENOVATE_TOKEN=ghp_xxxxxxxxxxxx \
  ghcr.io/renovatebot/renovate

Configuration renovate.json

Le fichier renovate.json dans chaque dépôt contrôle le comportement de Renovate pour ce dépôt.

Configuration minimale

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:recommended"
  ]
}

Configuration avancée

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended"],
  "timezone": "Europe/Paris",
  "schedule": ["before 6am on monday"],
  "labels": ["dependencies"],
  "assignees": ["mon-user"],
  "packageRules": [
    {
      "matchManagers": ["docker-compose", "dockerfile"],
      "matchUpdateTypes": ["patch"],
      "automerge": true
    },
    {
      "matchPackageNames": ["postgres", "redis", "mongodb"],
      "enabled": false
    },
    {
      "groupName": "Argo CD",
      "matchPackageNames": ["argoproj/argo-cd"]
    }
  ]
}

Managers courants

Docker / docker-compose

# docker-compose.yml - Renovate détecte et met à jour les images
services:
  app:
    image: ghcr.io/org/my-app:1.2.3    # Renovate ouvrira une PR pour 1.2.4
  db:
    image: postgres:15.4                # -> PR pour postgres:16.x

Helm values

# values.yaml ou Chart.yaml
dependencies:
  - name: postgresql
    version: "13.4.0"                   # Renovate met à jour la version du chart
    repository: https://charts.bitnami.com/bitnami

Flux / Argo CD

# kustomization.yaml géré par FluxCD
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
spec:
  postBuild:
    substitute:
      app_version: "1.2.3"              # Renovate peut mettre à jour cette valeur

Renovate supporte les HelmRelease FluxCD et les Application Argo CD nativement.

Go modules

// go.mod
module my-app

require (
    github.com/gin-gonic/gin v1.9.0    // -> PR pour v1.9.1
    github.com/go-redis/redis v8.11.5  // -> PR pour mise à jour
)

Auto-merge

{
  "packageRules": [
    {
      "matchUpdateTypes": ["patch", "pin", "digest"],
      "matchCurrentVersion": "!/^0/",
      "automerge": true,
      "automergeType": "pr",
      "automergeStrategy": "squash"
    }
  ]
}

Mise à jour

# Docker : pull la nouvelle image
docker pull ghcr.io/renovatebot/renovate:latest

Troubleshooting

# Activer les logs debug
docker run --rm \
  -e RENOVATE_TOKEN=ghp_xxxx \
  -e LOG_LEVEL=debug \
  ghcr.io/renovatebot/renovate \
  mon-org/mon-repo 2>&1 | tee renovate.log

# Dry-run (affiche les PRs qui seraient créées sans les créer)
docker run --rm \
  -e RENOVATE_TOKEN=ghp_xxxx \
  -e RENOVATE_DRY_RUN=full \
  ghcr.io/renovatebot/renovate \
  mon-org/mon-repo

# Valider la config renovate.json (outil dédié)
npx --yes renovate-config-validator renovate.json

# Ou via Docker
docker run --rm \
  -v $(pwd)/renovate.json:/usr/src/app/renovate.json \
  ghcr.io/renovatebot/renovate \
  config-validator

Ressources

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic