Blog
dranbleiben!
Georg Dörgeloh

UP TO DATE mit renovate

Alle Dependencies in einem Projekt aktuell zu halten, ist nicht gerade die Lieblingsaufgabe von Entwicklern. Ständig prüfen: Gibt es Updates? Was hat sich geändert? Kann ich das Update problemlos umsetzen?

Ein Bereich, bei dem ich die Unterstützung durch DevOps und ihre Zaubertools schätze.

Dieses Mal haben wir renovate bei uns im Projekt eingebaut. renovate ist ähnlich wie dependabot auf github und hilft dir deine Dependencies aktuell zu halten. Wenn es ein Update gibt, erstellt es einen Pull Request mit Hinweisen dazu, was aktualisiert wurde, auf welche Version und wenn es auf Github release-Notes gibt, werden dir diese im Pull Request auch direkt angezeigt.

renovate ist gegenüber dependabot allerdings feiner einstellbar. Es lassen sich bestimmte Gruppen und Verhaltensweisen definieren - anhand von Package-Name, Repository-URL, Datasource (npm, Docker, mvn, ...), Update-Typ usw.. Einige Presets sind auch schon vordefiniert.

Ich persönlich finde bei einer guten Code-Coverage ein auto-merge für minor und patch updates sehr sinnvoll. Außerdem können alle Updates von Angular gerne gruppiert werden. Wenn ich von Angular 11 auf Angular 12 wechseln will, brauche ich nicht für jede Dependency einen Pull Request (zumal die Tests in der CI in dem Fall eh nicht durchlaufen, bevor ich alles zusammengefasst habe).

Ebenso mag ich die Funktion, die Hashes der Docker-Images automatisch zu hinterlegen und zu aktualisieren. So kann ich mir auch sicher sein, dass wirklich in allen Umgebungen die gleichen Images genutzt werden und nicht in der CI veraltete Images, insbesondere beim finalen Build, genutzt werden.

renovate aktualisiert dabei nicht nur Dockerfiles sondern auch die Images in unserer .gitlab-ci.yml

Aber wie lässt sich renovate integrieren?

In Github kann renovate sehr einfach als App aktiviert werden (siehe hier). Aber auch in anderen Umgebungen lässt es sich leicht integrieren. Wir nutzen den renovate-runner für die GitLab-CI/CD pipeline:

Dazu reicht ein neues Projekt in Gitlab mit einer einfachen .gitlab-ci.yml

include:
  remote: 'https://gitlab.com/renovate-bot/renovate-runner/-/raw/main/templates/_common.gitlab-ci.yml'
variables:
  RENOVATE_ONBOARDING: 'true'
  RENOVATE_EXTRA_FLAGS: '--autodiscover=true --print-config=true'
image: renovate/renovate:25.34.3@sha256:b41b51c51565e247ccce82693ab1373645b345f2676c765286c4ba5f5458c303

Token für Github (zum auslesen der Release-Notes) und Token für GitLab hinterlegen und über den Scheduler den Job ausführen. Zuerst wird ein Pull Request für renovate.json als initiale Config angelegt.

Das übernehmen, evtl. anpassen und genießen.

Bisher meine Standard-Config:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base",
    "group:allNonMajor",
    "docker:enableMajor",
    ":automergeMinor"
  ],
  "gitLabAutomerge": true,
  "pinDigests": true
}

Wenn die CI keine Probleme meldet, werden damit Minor-Updates und Patches automatisch gemerged und ich habe Zeit, mich mit den wichtigen Dingen zu beschäftigen.

none
Conventic Icon
Standort Bonn
Burgstraße 69
53177 Bonn
Deutschland
+49 228 76 37 69 70
Standort Braunschweig
Westbahnhof 11
38118 Braunschweig
Deutschland
+49 228 76 37 69 70
Wir sind Mitglied bei
Grouplink Icon
Newsletter abonnieren
Impressum, Haftungsausschluss, Datenschutzerklärung und
© 2024 conventic GmbH · Alle Rechte vorbehalten.