Mein Workflow mit Kirby und Git

Lukas hatte mich auf Twitter gefragt, wie denn mein aktueller Workflow mit Git und Kirby aussieht. In meinem vorletzten Beitrag habe ich geschrieben, dass ich die Beiträge lokal verfasse, mir anschaue und mit git push uberspace dann auf den Server übertragen.

Am Schönsten finde ich aber, dass ich alles erstmal lokal testen kann und ein einfaches git push uberspace dann den Status auf die Live-Umgebung überträgt. Soll heißen: Ich kann die Blog-Beiträge im Code-Editor meiner Wahl schreiben und ruckzuck veröffentlichen.

In diesem Artikel möchte ich kurz erläutern, wie sich dieser Workflow realisieren lässt.

Schritt 1: Erstellen eines Git-Repositorys

Voraussetzung für den Workflow an sich ist ein SSH-Zugang auf den Server. Ich bin seit Jahren bei den Ubernauten und extrem zufrieden. Alleine wegen dem Support würde ich nicht wechseln wollen. Wie auch immer, zunächst muss eine SSH-Verbindung aufgebaut werden. Unter OS X und Linux lässt sich dies über den Befehl ssh regeln, Windows-Nutzer benötigen einen extra SSH-Client, etwa PuTTY. In meinem Fall heißt der Nutzer julian und liegt auf dem Server diphda.uberspace.de.

$ ssh julian@diphda.uberspace.de

Auf dem Server angemeldet, wird dann ein Git-Repository erstellt, ich erstelle es im Ordner website.git.

$ mkdir website.git
$ cd website.git
$ git init --bare

Sofern auf dem lokalen System noch kein entsprechender Ordner für die Website vorhanden ist, kann das leere Repository jetzt geklont werden.

$ git clone ssh://julian@diphda.uberspace.de/home/julian/website.git

Für den Fall, dass du bereits ein lokales Git-Repository hast, kann ein weiterer Remote-Server über folgenden Befehl ergänzt werden.

$ git remote add uberspace ssh://julian@diphda.uberspace.de/home/julian/website.git

In diesem Fall hab ich den Server uberspace genannt. Über git push uberspace kannst du dann die Änderungen übertragen. Falls du willst, kannst du den Host natürlich auch anders benennen, meinetwegen auch chemtrail :D

Schritt 2: Aktualisieren des Git Hooks

Jetzt würden die Dateien im Git-Repository herumliegen. Da bringen sie uns nur herzlich wenig, wir wollen ja, dass die Änderungen gleich in das Live-System eingespeist werden. Für solche Zwecke gibt es die Hooks von Git. In unserem Fall machen wir uns das Hook post-receive von Nutzen, welches dann ausgeführt wird, nachdem der Push-Vorgang abgeschlossen wurde. Dazu loggen wir uns wieder auf dem Server ein und navigieren in das Git-Repository. Über den Editor nano wird die Datei hooks/post-receive bearbeitet.

$ nano hooks/post-receive

In dieses wird dann der folgende Code hineinkopiert.

#!/bin/bash
path="/home/julian/html"

echo "========= GIT CHECKOUT ========="
GIT_WORK_TREE=$path git checkout -f master
echo "============= DONE ============="

In der path-Variable musst du den Pfad durch den Pfad ändern, der von außen zugänglich gemacht wurde. Beim Uberspace ist dies der Standardpfad /home/$USER/html. Selbstverständlich kannst du den Pfad auch so ändern, dass er auf eine Subdomain verweist. Letzten Endes macht der Befehl nichts anderes als einen Checkout, das heißt, dass eine Kopie der aktuellen Daten im gewählten Verzeichnis abgelegt wird. Mit Strg+O und Strg+X wird die Datei dann noch gespeichert. Fast fertig. Bisher ist die post-receive nichts weiter als eine simple Textdatei, erst mit folgendem Befehl wird diese als ausführbar markiert und somit als Bash-Script anerkannt.

chmod +x hooks/post-receive

Schritt 3: Test des Systems

An sich ist die Konfiguration damit abgeschlossen. Du kannst die SSH-Verbindung jetzt schließen, sie wird nicht länger benötigt. Das lokale Repository kann jetzt geöffnet werden und eine Beispieldatei, etwa eine index.html mit folgendem Inhalt kann hinzugefügt werden.

<!DOCTYPE html>
<html>
    <h1>Test document on my Uberspace and published via Git</h1>
</html>

Entweder nutzt du eine GUI, um den Commit auszuführen oder du nutzt für dieses Beispiel schnell die Kommandozeile. Die Befehle sehen wie folgt aus.

git add index.html
git commit -m "Test commit."

Und mit git push (oder git push uberspace, wenn du die SSH-Verbindung als weiteren Remote-Host konfiguriert hast) kannst du dann die Änderungen übertragen. Dabei sollte ein Output ausgegeben werden, der dem folgenden ähnelt.

Zähle Objekte: 3, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (2/2), Fertig.
Schreibe Objekte: 100% (3/3), 330 bytes | 0 bytes/s, Fertig.
Total 3 (delta 0), reused 0 (delta 0)
remote: ========= GIT CHECKOUT =========
remote: Already on 'master'
remote: ============= DONE =============
To ssh://julian@diphda.uberspace.de/home/julian/website.git
6a1a180..075d7c1  master -> master

Na, kommt dir was bekannt vor? Richtig, Git hat uns die Zeilen ==== GIT CHECKOUT ==== und ==== DONE ==== ausgespuckt, die wir im post-receive-Script angegeben haben :) Und du kannst auch live die Änderung im Browser betrachten.

Screenshot, der das HTML-Dokument von vorhin zeigt
Anscheinend hat alles geklappt.

Das war es auch schon. Nun hast du einen Überblick über alle Änderungen, die du bisher gemacht hast. Das, was ich mit der index.html erreicht habe, lässt sich auch mit einer gesamten Kirby-Installation umsetzen. So bin ich dann auch zu meinem Ergebnis gekommen :)

Kommentar hinterlassen

Markdown wird unterstützt.