Automatisch Publizieren mit Hugo

Automatisch Publizieren mit Hugo

Nach der erfolgreichen Umstellung auf Hugo habe ich mich gefragt, wie ich denn mit Hilfe von git beim Hinzufügen neuer Inhalte die statische Webseite automatisch neu genieren und auch sofort hochladen kann. In der Hugo-Dokumentation wird dabei auf CI/CD-Pipelines, z.B. von Github, gesetzt. Gerade heute wurde wieder einmal öffentlich, wie schnell doch Projekte durch kommerzielle Anbieter gefärdet werden können. Zur Vermeidung von irgendwelchen Kopfschmerzen wollte ich genau diese Abhängigkeit meiner Webseite von anderen Diensten vermeiden.

Die Lösung war so einfach: git Hooks.

Beim Ausführen von git-Aktionen wie z.B. push können per Hook weitere Aktionen ausgeführt werden. Im Hook post-receive habe ich folgendes Skript hinterlegt:

#!/bin/bash

GIT_REPO=$HOME/Websites/blog-tausys-de.git
WORKING_DIRECTORY=$HOME/Websites/blog-tausys-de.working
PUBLIC_WWW=$HOME/Websites/blog-tausys-de.public_html
BACKUP_WWW=$HOME/Websites/blog-tausys-de.backup_html
MY_DOMAIN=blog.tausys.de

set -e

rm -rf $WORKING_DIRECTORY
rsync -aqz $PUBLIC_WWW/ $BACKUP_WWW
trap "echo 'A problem occurred. Reverting to backup.'; rsync -aqz --del $BACKUP_WWW/ $PUBLIC_WWW; rm -rf $WORKING_DIRECTORY" EXIT

git clone --recurse-submodules -j8 $GIT_REPO $WORKING_DIRECTORY

rm -rf $PUBLIC_WWW/*
hugo -s $WORKING_DIRECTORY -d $PUBLIC_WWW -b "https://${MY_DOMAIN}"

~/venv/pagefind/bin/python3 -m pagefind --site $PUBLIC_WWW

rm -rf $WORKING_DIRECTORY
trap - EXIT

Das (bare) git-Repository liegt bei mir direkt auf dem Server im Verzeichnis $HOME/Websites/blog-tausys-de.git. Zum Generieren der Webseite werden mehrere andere Verzeichnisse mit jeweils eigenen Suffix benutzt. Im Fehlerfall wird die vor dem Generieren gesicherte Webseite wiederhergestellt.

Nach der Generierung der Seite mit Hugo wird noch ein Suchindex mit pagefind erstellt. Das Verzeichnis $PUBLIC_WWW ist gleichzeitig das Verzeichnis aus dem der Webserver die Webseite ausliefert. Alternativ kann natürlich die neu generierte Webseite auch per rsync auf den eigenen Server hochladen werden.

Nach jedem Push auf das git-Repository wird jetzt die Webseite neu gebaut und steht sofort im Webserver zur Verfügung.

OSS  Hugo  git 

Siehe auch

Um Kommentare lesen oder verfassen zu können benötigen wir deine Zustimmung zum Speichern eines Cookies.