Deployment von Hugo auf Codeberg Pages via Woodpecker CI
Deployment von Hugo auf Codeberg Pages via Woodpecker CI
https://codeberg.org/joerglohrer/hugopage
Vorbereitung
https://toheine.net/posts/2023/website-deployment/ +https://discourse.gohugo.io/t/is-it-possible-to-use-hugo-in-codeberg-page-repositories/31012/3
Neues Repository auf Codeberg erstellen
Lizenz: Apache-2.0, Repository initalisieren Standardbranch main, Rpository zu einem Template machen
Repo klonen
cd hugo-codeberg-pages-template
+
Branch pages
erstellen
git switch --orphan pages
+
git switch
: Dieser Befehl wird verwendet, um zwischen verschiedenen Git-Branches zu wechseln.--orphan
: Diese Option erzeugt einen neuen Branch, der keine Eltern-Commits hat. Er ist sozusagen völlig losgelöst von der bisherigen Commit-Historie des Repositorys.pages
: Das ist der Name des neuen Branches, der erstellt wird.
git rm --cached -r .
+
git rm
: Der Befehl zum Entfernen von Dateien aus der Git-Verfolgung. Die Dateien werden nicht aus deinem Arbeitsverzeichnis gelöscht.--cached
: Diese Flagge weist Git an, die Dateien nur aus dem Staging-Bereich zu entfernen, nicht aus deinem lokalen Dateisystem.-r
: Diese Flagge aktiviert die rekursive Entfernung, d.h. sie zielt auf Dateien in allen Unterverzeichnissen ab..
: Der Punkt kennzeichnet “alles im aktuellen Verzeichnis und darunter”.
nano neu.md
+git add neu.md
+git commit -m "neu"
+git push --set-upstream origin pages
+
Hugo installieren
hugo new site hugo-codeberg-pages-template –force
Vorbereitung für die Pipeline
Access Token erstellen
Unter https://codeberg.org/user/settings/applications + +Im Beispiel wird der Token-Name “hugopagetoken” generiert bei dem in den Berechtigungen unter “repository” Lesen und Schreiben ausgewählt ist. +Soblad man auf “Token generieren” klickt, erscheint der Token mit einem Hinweis, diesen jetzt zu kopieren, da er später nicht mehr angezeigt wird.
Geheimnisse eintragen
Auf https://ci.codeberg.org/repos das Repo hinzufügen für das die Pipeline gestartet werden soll und dort die Geheimnisse eintragen:
+
+Im Beispiel wird ein Geheimnis mit dem Namen codeberg_token
mit generierte hugopagetoken
mit dem Wert 883029f2a627c7b5fa181f24b9205a775add1ff1
eingesetzt und dann noch das Geheimnis mail
mit der Mailadresse des dazu passenden Codeberg-Users als Wert gespeichert.
Die Geheimnisse werden zur Laufzeit als Umgebungsvariablen an einzelne Pipelineschritte übergeben. +
Unter Allgemein
+
+.woodpecker.yml
angeben und die Vorlage verwenden aus folgendem Pipeline Beispiel
Codeberg Pages
https://docs.codeberg.org/codeberg-pages/ +Example Pipeline +https://codeberg.org/Codeberg-CI/examples/src/branch/main/Hugo
# hugo.yml
+#
+# Nimmt ein Repository mit Hugo-Quellcode, generiert die statische Website und veröffentlicht das Ergebnis auf Codeberg Pages
+#
+# Benötigt ein Codeberg-Zugangs-Token (codeberg_token) als secret in der Woodpecker-Konfiguration
+# Verwendet auch ein anderes secret (mail) mit E-Mail-Adresse für die Git-Konfiguration
+#
+# .domains-Datei im Repository wird in den Ausgabezweig kopiert, damit benutzerdefinierte Domains funktionieren
+#
+# Die Variable HUGO_OUTPUT muss auf den in Hugo konfigurierten Ausgabeordner gesetzt werden.
+
+
+# Ausschluss, dass die page-pipeline auf den "pages" Zweig angewendet wird
+when:
+ branch:
+ exclude: pages
+ event: [push, pull_request]
+
+# Rekursives Klonen wird verwendet, um die als Git-Submodule angegebenen Themes vollständig zu klonen
+clone:
+ git:
+ image: woodpeckerci/plugin-git
+ settings:
+ recursive: true
+
+steps:
+ # Build hugo static files
+ build:
+ image: klakegg/hugo
+ commands:
+ - hugo --minify
+ when:
+ event: [pull_request, push]
+
+ publish:
+ image: bitnami/git
+ # Must be set in Woodpecker configuration
+ secrets: [mail, codeberg_token]
+ environment:
+ - HUGO_OUTPUT=public
+ commands:
+ # Git configuration
+ - git config --global user.email $MAIL
+ - git config --global user.name "Woodpecker CI"
+ - git clone -b pages https://$CODEBERG_TOKEN@codeberg.org/$CI_REPO.git $CI_REPO_NAME
+ # Copy build step output to repository folder
+ - cp -ar $HUGO_OUTPUT/. $CI_REPO_NAME/
+ # Needed for custom domains
+ - cp .domains $CI_REPO_NAME || true # Ignore if it doesn't exist
+ # Commit and push all static files with pipeline started timestamp
+ - cd $CI_REPO_NAME
+ - git add .
+ - git commit -m "Woodpecker CI ${CI_COMMIT_SHA}"
+ - git push
+ when:
+ event: push
+