Der Runner fürs NAS, fertig zum Einsetzen
Image bauen und veröffentlichen / image (push) Canceled after 0s
Image bauen und veröffentlichen / image (push) Canceled after 0s
Gitea verteilt Arbeit nur, es baut nicht selbst. Der Workflow ist auf dem Server und hat einen Lauf angelegt — der bleibt liegen, weil niemand ihn ausführt. Das ist keine Eigenheit dieser Installation, sondern wie Gitea Actions arbeitet. `server/docker-compose.runner.yml` ist der fehlende Teil, und er gehört **auf das NAS**: dort läuft Docker ohnehin, und damit braucht ein neues Image nie wieder einen Arbeitsrechner. Zwei Dinge darin sind nicht offensichtlich und stehen deshalb als Kommentar daneben: der Docker-Socket ist der Kern — der Runner baut nicht selbst, sondern lässt den Docker des NAS bauen, und wer in diesen Container kommt, kann Docker auf dem NAS steuern. Und `GITEA_RUNNER_LABELS` muss `ubuntu-latest` nennen, weil der Flaro-Workflow genau das in `runs-on` verlangt; ohne die Zeile meldet sich der Runner mit anderen Marken an und der Lauf findet ihn nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
fbf4a29461
commit
aa1e14cdab
@@ -7,6 +7,11 @@
|
|||||||
# Tools/image-veroeffentlichen.sh → :latest
|
# Tools/image-veroeffentlichen.sh → :latest
|
||||||
# Tools/image-veroeffentlichen.sh 0.2.0 → :latest und :0.2.0
|
# Tools/image-veroeffentlichen.sh 0.2.0 → :latest und :0.2.0
|
||||||
#
|
#
|
||||||
|
# Nur eine Architektur — deutlich schneller, weil die fremde sonst unter
|
||||||
|
# Emulation läuft:
|
||||||
|
#
|
||||||
|
# FLARO_PLATTFORMEN=linux/amd64 Tools/image-veroeffentlichen.sh
|
||||||
|
#
|
||||||
# Vorher einmalig anmelden — das Passwort tippst du selbst ein:
|
# Vorher einmalig anmelden — das Passwort tippst du selbst ein:
|
||||||
#
|
#
|
||||||
# docker login git.scarriffle.com
|
# docker login git.scarriffle.com
|
||||||
@@ -17,6 +22,7 @@ REGISTRY="${FLARO_REGISTRY:-git.scarriffle.com}"
|
|||||||
PFAD="${FLARO_IMAGE_PATH:-scarriffle/flaro}"
|
PFAD="${FLARO_IMAGE_PATH:-scarriffle/flaro}"
|
||||||
BILD="$REGISTRY/$PFAD"
|
BILD="$REGISTRY/$PFAD"
|
||||||
FASSUNG="${1:-}"
|
FASSUNG="${1:-}"
|
||||||
|
PLATTFORMEN="${FLARO_PLATTFORMEN:-linux/amd64,linux/arm64}"
|
||||||
|
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
@@ -45,10 +51,10 @@ MARKEN=(-t "$BILD:latest")
|
|||||||
docker buildx inspect flaro-bauer >/dev/null 2>&1 \
|
docker buildx inspect flaro-bauer >/dev/null 2>&1 \
|
||||||
|| docker buildx create --name flaro-bauer --use >/dev/null
|
|| docker buildx create --name flaro-bauer --use >/dev/null
|
||||||
|
|
||||||
echo "Baue $BILD für amd64 und arm64 — das dauert, arm64 läuft unter Emulation."
|
echo "Baue $BILD für $PLATTFORMEN."
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--builder flaro-bauer \
|
--builder flaro-bauer \
|
||||||
--platform linux/amd64,linux/arm64 \
|
--platform "$PLATTFORMEN" \
|
||||||
-f server/Dockerfile \
|
-f server/Dockerfile \
|
||||||
"${MARKEN[@]}" \
|
"${MARKEN[@]}" \
|
||||||
--push .
|
--push .
|
||||||
|
|||||||
+11
-11
@@ -55,18 +55,18 @@ Einmal einrichten, danach ist jedes Update ein `docker compose pull`.
|
|||||||
baut Gitea das Image für **beide** Architekturen und legt es ab — ohne dass
|
baut Gitea das Image für **beide** Architekturen und legt es ab — ohne dass
|
||||||
jemand daran denken muss, und ohne Anmeldung am Arbeitsrechner.
|
jemand daran denken muss, und ohne Anmeldung am Arbeitsrechner.
|
||||||
|
|
||||||
**Voraussetzung ist ein registrierter Act-Runner.** Hat dein Gitea keinen,
|
**Voraussetzung ist ein registrierter Act-Runner.** Gitea verteilt Arbeit
|
||||||
passiert nichts; dann gilt A2. Nachsehen unter
|
nur, es baut nicht selbst: ohne Runner legt es bei jedem Push einen Lauf an,
|
||||||
*Einstellungen → Actions → Runner*. Ein Runner lässt sich als Container
|
der dann liegenbleibt. Nachsehen unter
|
||||||
neben Gitea betreiben:
|
*Repo → Einstellungen → Actions → Runner*.
|
||||||
|
|
||||||
```bash
|
Der Runner gehört **auf das NAS** — dort läuft Docker ohnehin, und damit
|
||||||
docker run -d --restart unless-stopped --name gitea-runner \
|
braucht es für ein neues Image nie wieder einen Arbeitsrechner. Fertig
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
vorbereitet liegt er in `server/docker-compose.runner.yml`; hineingehört nur
|
||||||
-e GITEA_INSTANCE_URL=https://git.scarriffle.com \
|
das Registrierungstoken aus derselben Gitea-Seite.
|
||||||
-e GITEA_RUNNER_REGISTRATION_TOKEN=<Token aus den Einstellungen> \
|
|
||||||
gitea/act_runner:latest
|
Danach erscheint der Runner in der Liste, und der wartende Lauf startet —
|
||||||
```
|
oder spätestens der nächste Push.
|
||||||
|
|
||||||
#### A2 · Von Hand vom Arbeitsrechner
|
#### A2 · Von Hand vom Arbeitsrechner
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Ein Gitea-Runner auf dem NAS.
|
||||||
|
#
|
||||||
|
# **Wozu.** Gitea verteilt Arbeit nur, es baut nicht selbst. Ohne einen
|
||||||
|
# registrierten Runner legt es bei jedem Push einen Lauf an, der dann
|
||||||
|
# liegenbleibt. Mit diesem hier baut das NAS das Flaro-Image selbst und legt
|
||||||
|
# es in die Registry desselben Gitea — danach braucht es keinen Arbeits-
|
||||||
|
# rechner mehr.
|
||||||
|
#
|
||||||
|
# **Das Token holst du dir vorher:**
|
||||||
|
# Gitea → Repo → Einstellungen → Actions → Runner → Neuen Runner erstellen
|
||||||
|
#
|
||||||
|
# Ein Runner auf Organisations- oder Serverebene bedient alle Repos; das
|
||||||
|
# Token dafür steht in der jeweiligen Verwaltung.
|
||||||
|
|
||||||
|
services:
|
||||||
|
runner:
|
||||||
|
image: gitea/act_runner:latest
|
||||||
|
container_name: gitea-runner
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- GITEA_INSTANCE_URL=https://git.scarriffle.com
|
||||||
|
# Hier das Token aus der Gitea-Oberfläche eintragen.
|
||||||
|
- GITEA_RUNNER_REGISTRATION_TOKEN=
|
||||||
|
- GITEA_RUNNER_NAME=nas
|
||||||
|
# **Welche Marken dieser Runner bedient.** `ubuntu-latest` ist die, die
|
||||||
|
# der Flaro-Workflow in `runs-on` nennt. Ohne diese Zeile meldet sich
|
||||||
|
# der Runner mit den Vorgaben an, und ein Lauf findet ihn womöglich
|
||||||
|
# nicht.
|
||||||
|
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://catthehacker/ubuntu:act-latest
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
# **Der Docker-Socket ist der Kern.** Der Runner baut nicht selbst,
|
||||||
|
# sondern lässt den Docker des NAS bauen. Ohne ihn scheitert jeder
|
||||||
|
# Schritt, der ein Image anfasst.
|
||||||
|
#
|
||||||
|
# Das ist zugleich die Abwägung: wer in diesen Container kommt, kann
|
||||||
|
# Docker auf dem NAS steuern. Deshalb gehört er nicht ins Internet und
|
||||||
|
# nimmt nur Arbeit von deinem eigenen Gitea an.
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
# Anmeldung und Zwischenstände. Ohne dieses Volume meldet sich der
|
||||||
|
# Runner nach jedem Neustart neu an, und in der Liste sammeln sich
|
||||||
|
# Karteileichen.
|
||||||
|
- /volume4/CRITICAL/Docker/gitea-runner:/data
|
||||||
Reference in New Issue
Block a user