Blog

dranbleiben!

technology
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, wo ich die Unterstützung durch Dev-Ops 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 PR mit Hinweisen dazu, was aktualisiert wurde, auf welche Version und wenn es auf Github release-Notes gibt, werden dir diese im PR 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 PR (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 PR 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 97 27 27 40
hello@conventic.com

Standort Braunschweig

Westbahnhof 11
38118 Braunschweig
Deutschland
+49 228 97 27 27 40
hello@conventic.com

Wir sind Mitglied bei

Grouplink Icon
Software Allianze Icon
Hubwerk Icon

Newsletter abonnieren

Twitter Icon
Facebook Icon
Instagram Icon
Xing Icon
LinkedIn Icon
Impressum, Haftungsausschluss und Datenschutzerklärung
© 2021 conventic GmbH · Alle Rechte vorbehalten.