Renovate

Übersicht

Für die Verwaltung von Abhängigkeiten und Versionsupdates wird Renovate eingesetzt.

Die Lösung besteht aus zwei Komponenten:

  • Renovate Operator im Kubernetes-Cluster

  • Renovate-Konfiguration in den Git-Repositories

Der Renovate Operator führt regelmäßige Scans der konfigurierten Repositories durch und erstellt Pull Requests für verfügbare Updates.

Renovate Operator

Der Betrieb erfolgt über den Renovate Operator als Kubernetes-Anwendung.

Der Operator wird selbst über FluxCD als HelmRelease aus einem OCI-Repository bereitgestellt.

Beispiel:

apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
  name: renovate-operator
spec:
  url: oci://ghcr.io/mogenius/helm-charts/renovate-operator
  ref:
    tag: "5.6.0"

Zusätzlich wird ein RenovateJob definiert, der die konfigurierten Forgejo- oder Git-Repositories regelmäßig scannt.

apiVersion: renovate-operator.mogenius.com/v1alpha1
kind: RenovateJob
metadata:
  name: renovate-forgejo
spec:
  provider:
    name: forgejo
  schedule: "8 * * * *"

Renovate-Konfiguration

Die zentrale Konfiguration erfolgt über eine renovate.json.

{
  "$schema": "https://renovatebot.com",
  "extends": [
    "config:recommended"
  ],
  "flux": {
    "managerFilePatterns": [
      "/.+\\.yaml$/"
    ]
  }
}

Der Flux Manager wird aktiviert, damit FluxCD-Ressourcen automatisch erkannt und ausgewertet werden.

Automatische Patch-Updates

Patch-Releases werden automatisch gemergt.

Minor- und Major-Releases erfordern eine manuelle Freigabe.

{
  "packageRules": [
    {
      "matchManagers": ["flux", "kubernetes", "helm-values"],
      "matchUpdateTypes": ["patch"],
      "automerge": true
    },
    {
      "matchManagers": ["flux", "kubernetes", "helm-values"],
      "matchUpdateTypes": ["minor", "major"],
      "automerge": false
    }
  ]
}

Dadurch werden sicherheitsrelevante und fehlerbehebende Patch-Releases automatisiert eingespielt, während größere Versionssprünge bewusst geprüft werden.

Verwendung mit Flux OCIRepository

Helm-Charts werden im Homelab überwiegend über OCIRepository-Ressourcen bereitgestellt.

Beispiel:

apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
  name: compass
spec:
  url: oci://ghcr.io/adinhodovic/charts/compass
  ref:
    tag: "0.6.0"

Renovate erkennt und aktualisiert OCI-Referenzen zuverlässig, wenn die Version über spec.ref.tag definiert wird.

Entscheidung: ref.tag statt semver

Für OCIRepository-Ressourcen wird grundsätzlich spec.ref.tag verwendet.

ref:
  tag: "2.11.0"

Nicht verwendet wird:

ref:
  semver: ">=2.11.0"

Grund dafür ist das Verhalten des Renovate Flux Managers.

Renovate erkennt OCI-Tags zuverlässig und kann Versionsupdates direkt auf das Feld spec.ref.tag anwenden. Die Verwendung von spec.ref.semver wird dagegen nicht in allen OCI-Szenarien zuverlässig erkannt oder aktualisiert.

Die Verwendung von festen Tags sorgt daher für:

  • zuverlässige Renovate-Erkennung

  • reproduzierbare Deployments

  • nachvollziehbare Git-Historie

  • klar erkennbare Versionsänderungen in Pull Requests

Beispiel

Die folgenden Ressourcen werden automatisch durch Renovate aktualisiert:

kind: OCIRepository
spec:
  url: oci://ghcr.io/piraeusdatastore/piraeus-operator/piraeus
  ref:
    tag: "2.11.0"
kind: OCIRepository
spec:
  url: oci://ghcr.io/adinhodovic/charts/compass
  ref:
    tag: "0.6.0"
kind: OCIRepository
spec:
  url: oci://ghcr.io/mogenius/helm-charts/renovate-operator
  ref:
    tag: "5.6.0"