Forgejo-Runner
-
Nachdem ich ja hier einen Forgejo-Server aufgesetzt habe, den ich mittlerweile auch produktiv nutze, bin ich natürlich sehr schnell über Actions gestolpert.
Mit Actions kann man verschiedene Prozesse automatisieren. z.B. das Testen seiner Repos, den Build Prozess usw.
Doch wie macht man das?
Dafür hat Forgejo ein Tool namens Forgejo-Runner. Die Anleitung für die Installation findet man -> https://forgejo.org/docs/latest/admin/runner-installation/
Aus der Anleitung
The Forgejo Runner is a daemon that fetches workflows to run from a Forgejo instance, executes them, sends back with the logs and ultimately reports its success or failure.
It needs to be installed separately from the main Forgejo instance. For security reasons it is not recommended to install the runner on the same machine as the main instance.
Ok, kann ich nicht auf dem Forgejo Server mitlaufen lassen
Das Schöne an dem Runner ist, er kann auch lokal laufen, sprich auf meinem Proxmox
Das bin ich dann mal angegangen. Ich wollte jetzt hier nicht wieder eine Anleitung schreiben, dazu gibt es im Netz genügend Informationen. Die Original Anleitung erklärt den Installationsprozess auch ausreichend gut, bis auf eine Kleinigkeit. Die Podman Einbindung habe ich nicht besonders gut hinbekommen, also hatte ich eine anstrengende Sitzung. Es hat lange gedauert, bis ich es hinbekommen habe.
Systemd
Im wesentlichen habe ich jetzt einen Debian 13 Trixie Server aufgesetzt, dieser hat Podman verpasst bekommen. Es gibt einen User runner und einen User docker. Zwei SystemD-Dienste habe ich angelegt.
podman-docker-socket.service
[Unit] Description=Podman Docker API Socket Documentation=man:podman-system-service(1) Wants=network-online.target After=network-online.target [Service] Type=simple ExecStart=/usr/bin/podman system service --time=0 unix:///var/run/docker.sock ExecStartPost=/bin/sh -c 'sleep 1 && chown root:docker /var/run/docker.sock && chmod 660 /var/run/docker.sock' Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
forgejo-runner.service
[Unit] Description=Forgejo Runner Documentation=https://forgejo.org/docs/latest/admin/actions/ After=docker.service [Service] ExecStart=forgejo-runner daemon ExecReload=/bin/kill -s HUP $MAINPID # This user and working directory must already exist User=runner WorkingDirectory=/home/runner Restart=on-failure TimeoutSec=0 RestartSec=10 [Install] WantedBy=multi-user.target
Der podman-docker-socket.service macht was?
This command makes Podman listen on the standard Docker socket location (/var/run/docker.sock), which allows Docker clients and tools to communicate with Podman instead of Docker. Essentially, it lets you use Docker-compatible tools with Podman as the backend container engine.
This is useful in environments where you want to use Podman instead of Docker (for security or other reasons) but still need compatibility with tools that expect to talk to Docker.
@geklaut von claude.aiOk, damit kann der Forgejo-Runner ganz normal seine Docker Befehle absetzen und Podman übernimmt dann.
Auf meinem Server sieht das dann so aus
pstree systemd─┬─agetty ├─cron ├─dbus-daemon ├─dhclient ├─forgejo-runner───7*[{forgejo-runner}] ├─podman───7*[{podman}] ├─qemu-ga───{qemu-ga} ├─sshd───sshd-session───sshd-session───bash───pstree ├─systemd───(sd-pam) ├─systemd-journal ├─systemd-logind ├─systemd-timesyn───{systemd-timesyn} └─systemd-udevd
Wie man die Actions beim Runner registriert, ist in der Anleitung gut dokumentiert. Den Token dafür bekommt man auf dem Forgejo-Server.
Wenn dann alles so weit funktioniert, kann man in seine Repos folgendes einbauen. Der Workflow dient zum Testen, ob alles gut funktioniert.
.forgejo/workflows/test.yaml
name: Test Runner on: push: branches: [ main ] workflow_dispatch: jobs: test: runs-on: docker container: image: debian:12 steps: # Package duf installieren - name: Install package duf run: | apt-get update && apt-get install -y duf - name: Test Connection run: | echo "Hello from Runner!" whoami hostname date duf echo "Environment is working!"
Wenn man das dann pusht, startet der Workflow / Actions.
Am Ende sollte alles grün sein
Man kann sich dann die Ausgabe ansehen, ob alles geklappt hat, wie man es erwartet.
So weit bin ich zufrieden und kann mich damit jetzt weiter beschäftigen.
Anmerkung
Wie immer, wer Fehler oder Blödsinn findet, mag das bitte hier unten drunter schreiben. Ich ändere das dann gerne.
-
-
-
-
-
-
Wichtige Links
Angeheftet Ansible -
-