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"