Forgejo Runner #
Ein Forgejo Runner ist ein Daemon, der mit einer Forgejo-Instanz zusammenarbeitet, um CI/CD (Continuous Integration/Continuous Delivery)-Jobs auszuführen. Er ruft Workflows von der Forgejo-Instanz ab, führt sie in einer isolierten Umgebung aus und sendet dann Protokolle und den endgültigen Status zurück.
Quelle #
Helm-Chart forgejo-runner aus der OCI-Registry codeberg.org/wrenix/helm-charts.
Dokumentation #
Die Dokumentation für den Runner ist Teil der Forgejo-Dokumentation.
Funktion #
Dieser Dienst stellt Runner für die Ausführung von CI/CD-Pipelines bereit. Es sind zwei Instanzen konfiguriert: eine für die lokale Forgejo-Instanz und eine weitere für Codeberg.
Lokale Anpassungen #
- Die
values.yaml-Datei enthält die Konfiguration für die Haupt-Runner-Instanz, einschließlich der Verbindung zur Forgejo-Instanz und der Runner-Labels. - Die
values-codeberg.yaml-Datei enthält die Konfiguration für die Codeberg-Runner-Instanz. - Beide Instanzen verwenden Docker-in-Docker (DinD) für die Ausführung von Jobs.
Wichtige Einstellungen #
- Instanzen: Es werden zwei Runner-Deployments erstellt:
forgejo-runner: Verbindet sich mit der lokalen Instanz.forgejo-runner-codeberg: Verbindet sich mit der öffentlichen Instanzhttps://codeberg.org.
- Replikas: Für die lokale Instanz werden 5 Runner-Replikate betrieben — je einer pro Hardware-Node, erzwungen über
podAntiAffinity(topologyKey: kubernetes.io/hostname). Mitcapacity: 2ergibt das 10 parallel ausführbare Jobs. - Ressourcen: Beide Container haben Requests/Limits. Das CPU-Limit liegt auf dem
dind-Container (4 CPU), damit CI-Jobs die auf denselben Nodes laufenden Produktions-Workloads nicht verdrängen können. - Docker-Daemon:
daemon.json(MTU 1400, IPv6) wird per ConfigMapdocker-configin dendind-Container nach/etc/docker/daemon.jsongemountet. - Labels: Die Runner sind mit einer Vielzahl von Labels konfiguriert, die auf verschiedene Docker-Images von
catthehacker/ubuntuverweisen. Diese Images sind speziell für die Verwendung mit Gitea/Forgejo Actions vorbereitet. - Docker-in-Docker: Die Runner laufen im
privileged-Modus und mithost-Netzwerk, um Docker-Befehle innerhalb der CI-Jobs ausführen zu können (Docker-in-Docker).
Installation #
Das Chart wird zweimal aus derselben Quelle instanziiert — einmal je Zielinstanz. Die Bereitstellung wird durch die kustomization.yaml-Datei verwaltet.
1kubectl kustomize --enable-helm apps/forgejo-runner | kubectl apply -n forgejo-runner -f -Abhängigkeiten #
- Forgejo: Eine laufende Forgejo-Instanz, bei der sich die Runner registrieren können.
- Keine Docker-Engine auf den Nodes nötig: Jeder Runner-Pod bringt seinen eigenen Docker-Daemon als
dind-Sidecar mit. Dafür läuft der Pod privilegiert — er kann damit mehr als ein gewöhnlicher Workload, was der Preis für Docker-in-Docker ist.