<!doctype html><html lang=de-de><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge,chrome=1"><title>Deployment von Hugo auf Codeberg Pages via Woodpecker CI | My New Hugo Site</title><meta name=viewport content="width=device-width,minimum-scale=1"><meta name=description content="Mit Codeberg-Pages eine eigene Webseite hosten"><meta name=generator content="Hugo 0.111.3"><meta name=robots content="noindex, nofollow"><link rel=stylesheet href=/dings/ananke/css/main.min.css><link rel=canonical href=https://joerglohrer.codeberg.page/dings/ersteseite/><meta property="og:title" content="Deployment von Hugo auf Codeberg Pages via Woodpecker CI"><meta property="og:description" content="Mit Codeberg-Pages eine eigene Webseite hosten"><meta property="og:type" content="article"><meta property="og:url" content="https://joerglohrer.codeberg.page/dings/ersteseite/"><meta property="article:section" content><meta itemprop=name content="Deployment von Hugo auf Codeberg Pages via Woodpecker CI"><meta itemprop=description content="Mit Codeberg-Pages eine eigene Webseite hosten"><meta itemprop=wordCount content="537"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="Deployment von Hugo auf Codeberg Pages via Woodpecker CI"><meta name=twitter:description content="Mit Codeberg-Pages eine eigene Webseite hosten"></head><body class="ma0 avenir bg-near-white DEV"><header><div class=bg-black><nav class="pv3 ph3 ph4-ns" role=navigation><div class="flex-l justify-between items-center center"><a href=/dings/ class="f3 fw2 hover-white no-underline white-90 dib">My New Hugo Site</a><div class="flex-l items-center"><div class=ananke-socials></div></div></div></nav></div></header><main class=pb7 role=main><div class="flex-l mt2 mw8 center"><article class="center cf pv5 ph3 ph4-ns mw7"><header><h1 class=f1>Deployment von Hugo auf Codeberg Pages via Woodpecker CI</h1></header><div class="nested-copy-line-height lh-copy f4 nested-links mid-gray"><h1 id=deployment-von-hugo-auf-codeberg-pages-via-woodpecker-ci>Deployment von Hugo auf Codeberg Pages via Woodpecker CI</h1><p><a href=https://codeberg.org/joerglohrer/hugopage>https://codeberg.org/joerglohrer/hugopage</a></p><h2 id=vorbereitung>Vorbereitung</h2><p><a href=https://toheine.net/posts/2023/website-deployment/>https://toheine.net/posts/2023/website-deployment/</a> <a href=https://discourse.gohugo.io/t/is-it-possible-to-use-hugo-in-codeberg-page-repositories/31012/3>https://discourse.gohugo.io/t/is-it-possible-to-use-hugo-in-codeberg-page-repositories/31012/3</a></p><h3 id=neues-repository-auf-codeberg-erstellenhttpscodebergorgrepocreate><a href=https://codeberg.org/repo/create>Neues Repository auf Codeberg erstellen</a></h3><p>Lizenz: Apache-2.0, Repository initalisieren Standardbranch main, Rpository zu einem Template machen</p><h3 id=repo-klonen>Repo klonen</h3><p><a href=https://docs.codeberg.org/getting-started/first-repository/#option-a%3A-clone-the-newly-created%2C-empty-repository>https://docs.codeberg.org/getting-started/first-repository/#option-a%3A-clone-the-newly-created%2C-empty-repository</a></p><pre tabindex=0><code class=language-git data-lang=git>cd hugo-codeberg-pages-template </code></pre><h3 id=branch-pages-erstellen>Branch <code>pages</code> erstellen</h3><pre tabindex=0><code>git switch --orphan pages </code></pre><ul><li><code>git switch</code>: Dieser Befehl wird verwendet, um zwischen verschiedenen Git-Branches zu wechseln.</li><li><code>--orphan</code>: 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.</li><li><code>pages</code>: Das ist der Name des neuen Branches, der erstellt wird.</li></ul><pre tabindex=0><code>git rm --cached -r . </code></pre><ul><li><code>git rm</code>: Der Befehl zum Entfernen von Dateien aus der Git-Verfolgung. Die Dateien werden nicht aus deinem Arbeitsverzeichnis gelöscht.</li><li><code>--cached</code>: Diese Flagge weist Git an, die Dateien nur aus dem Staging-Bereich zu entfernen, nicht aus deinem lokalen Dateisystem.</li><li><code>-r</code>: Diese Flagge aktiviert die rekursive Entfernung, d.h. sie zielt auf Dateien in allen Unterverzeichnissen ab.</li><li><code>.</code> : Der Punkt kennzeichnet “alles im aktuellen Verzeichnis und darunter”.</li></ul><pre tabindex=0><code>nano neu.md git add neu.md git commit -m "neu" git push --set-upstream origin pages </code></pre><p><img src=https://pad.gwdg.de/uploads/1596177b-0edd-4b54-bf40-6ee57da781b3.png alt></p><h3 id=hugo-installieren>Hugo installieren</h3><p>hugo new site hugo-codeberg-pages-template –force</p><h3 id=vorbereitung-für-die-pipeline>Vorbereitung für die Pipeline</h3><h4 id=access-token-erstellenhttpsdocscodebergorgadvancedaccess-token><a href=https://docs.codeberg.org/advanced/access-token/>Access Token erstellen</a></h4><p>Unter <a href=https://codeberg.org/user/settings/applications>https://codeberg.org/user/settings/applications</a> <img src=https://pad.gwdg.de/uploads/f6c96753-5ec0-4171-883f-3c73b0f8b8fb.png alt> 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.</p><h4 id=geheimnisse-eintragen>Geheimnisse eintragen</h4><p>Auf <a href=https://ci.codeberg.org/repos>https://ci.codeberg.org/repos</a> das Repo hinzufügen für das die Pipeline gestartet werden soll und dort die Geheimnisse eintragen: <img src=https://pad.gwdg.de/uploads/f2e2ac23-bd28-47d3-8337-7191d54cbef2.png alt> Im Beispiel wird ein Geheimnis mit dem Namen <code>codeberg_token</code> mit generierte <code>hugopagetoken</code> mit dem Wert <code>883029f2a627c7b5fa181f24b9205a775add1ff1</code> eingesetzt und dann noch das Geheimnis <code>mail</code> mit der Mailadresse des dazu passenden Codeberg-Users als Wert gespeichert.</p><p>Die Geheimnisse werden zur Laufzeit als Umgebungsvariablen an einzelne Pipelineschritte übergeben. <img src=https://pad.gwdg.de/uploads/71208375-05dc-4388-986e-6b5d3df9941f.png alt></p><p>Unter Allgemein <img src=https://pad.gwdg.de/uploads/e78b0d20-0591-4331-8c0d-f1ce388ee527.png alt> <code>.woodpecker.yml</code> angeben und die Vorlage verwenden aus folgendem Pipeline Beispiel</p><h3 id=codeberg-pages>Codeberg Pages</h3><p><a href=https://docs.codeberg.org/codeberg-pages/>https://docs.codeberg.org/codeberg-pages/</a> Example Pipeline <a href=https://codeberg.org/Codeberg-CI/examples/src/branch/main/Hugo>https://codeberg.org/Codeberg-CI/examples/src/branch/main/Hugo</a></p><pre tabindex=0><code class="language-shell=ssh" data-lang="shell=ssh"># 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 </code></pre></div></article></div></main><footer class="bg-black bottom-0 w-100 pa3" role=contentinfo><div class="flex justify-between"><a class="f4 fw4 hover-white no-underline white-70 dn dib-ns pv2 ph3" href=https://joerglohrer.codeberg.page/dings/>© My New Hugo Site 2024</a><div><div class=ananke-socials></div></div></div></footer></body></html>