[Tuto] Renovate OSS sur Gitlab

Hello,

Tout d’abord, pourquoi Renovate ? Je suis tout seul à gérer mon infra, et sans Renovate, ça serait impossible. Avec Renovate, j’ai automatiquement des MR de créées que ce soit sur mon repo Ansible ou bien sur des repo Docker. L’effort pour maintenir à jour mes dépendances, images, etc, est vraiment minime.

Il y a quelques temps, j’avais discuté de Renovate avec certains d’entre vous. A l’époque, je l’utilisais sur Github en mode SaaS, donc la version non libre, ce qui était un blocage pour certains.

J’ai entamé une migration vers Gitlab (l’instance Framagit) et j’ai maintenant une forge entièrement libre, et surtout c’était très simple à faire !

Voici, en gros, la marche à suivre :

Pré-requis : Avoir un Runner Gitlab avec un exécuteur Docker (si ça intéresse du monde, je pourrais détailler la marche à suivre)

  1. Cloner le repo Mend Renovate / renovate-runner · GitLab et suivre les instructions du repo. Pour la création du token, je vous suggère de faire un Group Access Token, ça permettra à Renovate d’avoir accès à tous les repo du groupe.
  2. Modifier le CI du repo cloné pour supprimer tout ce qui nous intéresse pas : .gitlab-ci.yml · main · Colibris.xyz / Renovate Runner · GitLab
  3. J’ai aussi configuré Renovate pour qu’il ne tourne pas sur ce repo (si je veux le mettre à jour, je récupère les changements depuis la branche d’origine). Ca donne ceci : RENOVATE_EXTRA_FLAGS : --autodiscover=true --onboarding=true --autodiscover-filter=!/colibris-xyz/renovate-runner/
  4. Créer un job « schédulé » afin de lancer automatiquement le CI qui va faire tourner Renovate (personnellement, une fois par jour dans la nuit)
  5. Et voilà, lors de la première exécution de Renovate, si vous l’avez réglé en « autodiscover », Renovate créera une MR sur tous les repo découverts.

Comment utiliser Renovate au maximum de ses capacités ?

Par défaut, Renovate va être capable de mettre à jour les package.json and co, mais pour certaines choses il va falloir l’aider.

Par exemple, pour mettre à jour une variable dans un Dockerfile :

    "regexManagers": [{
    "fileMatch": ["^Dockerfile$"],
    "matchStrings": ["ARG BENEVALIBRE_VERSION=(?<currentValue>.*?)\n"],
    "depNameTemplate": "https://forge.cliss21.org/cliss21/benevalibre",
    "datasourceTemplate": "git-tags"
  }]

Source : Colibris.xyz / benevalibre-docker · GitLab

Et je viens de découvrir qu’il existe maintenant un preset : RegexManager Presets - Renovate Docs

Ou bien dans un repo Ansible :

## Extrait du fichier renovate.json :

  "regexManagers": [
    {
      "fileMatch": [
        "^(?:group|host)_vars\/.*\\.ya?ml$"
      ],
      "matchStrings": [
        "# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?\\s.*?_(tag|version):\\s\"?(?<currentValue>.+?)\"?\\s"
      ]
    }
  ]

## Extrait d'un fichier de variables Ansible :

# renovate: datasource=docker depName=traefik
traefik__image_tag: v2.9.6 

Il est aussi possible de configurer Renovate pour merger automatiquement les MR. Par exemple :

  "packageRules": [
    {
      "matchUpdateTypes": ["patch", "pin", "digest"],
      "automerge": true
    }
  ]

Voilà, j’espère que tout ça servira à quelqu’un, et que ça vous libérera du temps ! Et surtout n’hésitez pas si vous avez des questions :slight_smile:

4 Likes