ci: statisches Deploy nach /var/www/sites/website (Hugo build + rsync)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
maik
2026-08-18 17:13:54 +02:00
co-authored by Claude Opus 4.8
parent 15e23700ac
commit e5d9f07bb6
+31 -22
View File
@@ -1,7 +1,7 @@
name: Build & Deploy Website name: Build & Deploy Website
# Hugo-Projekt (kein Node!). Baut das Image via Dockerfile (Hugo-Build im Container) # Hugo-Projekt. Baut die statische Seite und legt sie in den Webroot
# und startet den nginx-Container (Port 8066) neu. Runner + nginx laufen auf 10.161.30.38. # /var/www/sites/website/ auf 10.161.30.38 (Runner läuft dort). Davor: Nginx Proxy Manager.
on: on:
push: push:
@@ -12,37 +12,46 @@ concurrency:
group: deploy-main group: deploy-main
cancel-in-progress: true cancel-in-progress: true
env:
HUGO_VERSION: "0.148.2"
WEBROOT: /var/www/sites/website
jobs: jobs:
deploy: deploy:
# WICHTIG: Muss zu einem Label deines Gitea-Runners passen (Gitea → Admin/Repo → Runners). # Muss zu einem Label deines Gitea-Runners passen. Der Runner MUSS auf dem Host
# Der Runner braucht Zugriff auf Docker (Host-Runner ODER Container-Runner mit # laufen (Host-Modus) und Schreibrechte auf ${WEBROOT} haben sonst kommt er
# gemountetem /var/run/docker.sock). Ohne Docker-Zugriff schlägt der Deploy fehl. # nicht an den Webroot (Container-Runner sieht das Host-Dateisystem nicht).
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout inkl. Git LFS - name: Checkout inkl. Git LFS
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true # ZWINGEND sonst kommen LFS-Pointer statt Bilder/Fonts an lfs: true # ZWINGEND sonst LFS-Pointer statt Bilder/Fonts
fetch-depth: 1 fetch-depth: 1
- name: LFS-Dateien holen - name: LFS-Dateien holen
run: git lfs pull run: git lfs pull
- name: Container bauen & neu starten - name: Werkzeuge sicherstellen (Hugo extended, rsync)
run: docker compose up -d --build --remove-orphans
- name: Alte Images aufräumen
run: docker image prune -f
- name: Healthcheck (:8066)
run: | run: |
for i in $(seq 1 20); do set -e
if wget -qO- http://localhost:8066/ >/dev/null 2>&1; then command -v rsync >/dev/null || (apt-get update -qq && apt-get install -yqq rsync ca-certificates curl)
echo "OK: Seite antwortet auf :8066"; exit 0 if ! command -v hugo >/dev/null 2>&1 || ! hugo version | grep -q "v${HUGO_VERSION}"; then
fi curl -fsSL "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz" -o /tmp/hugo.tgz
echo "warte auf Container … ($i/20)"; sleep 3 tar -xzf /tmp/hugo.tgz -C /usr/local/bin hugo
done fi
echo "FEHLER: Seite antwortet nicht auf :8066" hugo version
docker compose logs --tail=50 || true
exit 1 - name: Seite bauen
run: hugo --gc --minify
- name: In den Webroot deployen
run: |
set -e
mkdir -p "${WEBROOT}"
rsync -a --delete public/ "${WEBROOT}/"
echo "Deployt nach ${WEBROOT} ($(find "${WEBROOT}" -type f | wc -l) Dateien)"
- name: Prüfen
run: test -f "${WEBROOT}/index.html" && echo "OK: index.html im Webroot vorhanden"