Menü
Kontakt

Automatisierte Deployments für WordPress mit buddy.works

Bild von felix-niedballa felix-niedballa
27.11.2020

Zu einer stabilen Entwicklung eines WordPress-Webseite gehört nicht nur ein sauber programmiertes Theme, sorgfältig ausgewählte Plugins, sondern auch die Automatisierung von Deployments (Prozesse zur Installation von Software). Händisches Übertragen von Dateien via FTP-Tool sind meist Fehleranfällig, denn sie werden von Entwicklern durchgeführt und diese können bekanntlich auch mal einen Fehler machen 😉 Deshalb möchten wir im Folgenden das Tool buddy.works vorstellen, welches sich hervorragend eignet Deployments zu automatisieren – natürlich nicht nur für WordPress-Seiten.

Das Tool buddy.works

Initial wurde das vorgestellte Tool unter dem Namen Meat! als Virtuelle Maschine vertrieben, jedoch im November 2015 zu buddy.works umbenannt und als Cloud-Dienst zur Verfügung gestellt. Mit vielen vorgefertigten Aktionen (dazu später mehr) kann man sich einfache bis komplexe Continuous Integration-Prozesse per Baukasten konfigurieren. buddy.works kann kostenlos genutzt werden; für größere Unternehmen und Agenturen bieten sich jedoch größere, kostenpflichtige Pakete an, welche sich ab 75 Dollar im Monat buchen lassen.

Funktionen zum Bauen von Continuous Integration-Prozesse

Hauptbestandteil von buddy.works sind Projekte, die immer auf einem Code-Repository aufbauen. Dabei ist es leicht möglich bestehende Accounts (bspw. bei Bitbucket) zu verknüpfen.

Nach Auswahl des Repository-Hostings und der Auswahl des Repositories selbst, ist es möglich, die Pipeline zu bauen. Diese Pipeline bildet den Prozess ab, der erfolgen muss, damit der Code aus dem Repository ins Live-System übergeht.

Dabei besteht eine Pipeline aus beliebig vielen Aktionen, welche nacheinander, aber auch parallel ablaufen können. So gibt es Aktionen, die beispielsweise trivial sind (Upload von Dateien aus dem Repository über SFTP auf einen zu konfigurierenden Server), als auch extrem komplex sein können (Verbindung mit der Google Cloud um einen Kubernetes-Cluster aufzubauen). Sollte eine Aktion nicht erfolgreich sein, wird der Prozess abgebrochen.

Eine Auswahl an Aktionen, die für das Beispiel einer „WordPress-Theme-Deployment-Automatisierung“ genutzt werden können, sind folgende:

  • SFTP-Upload
  • NodeJS-Ausführung
  • SSH-Verbindung zum Server
  • Web-Uptime-Monitoring

Übersicht diverser Aktionen

Continuous Integration für WordPress Webseite

Für den Ablauf einer Continuous Integration für WordPress Theme wird kurz das Test-Repository skizziert. Im Repository-Ordner liegen die wichtigen Unterordner src und theme. Während im src-Ordner die Quelldateien für das Frontend platziert sind (scss-Code, JavaScript, Bild- und Mediendateien), werden diese durch einen Gulp-Prozess (definiert in gulpfile.js) in den theme-Ordner kompiliert. Der Theme-Ordner ist als das eigentliche Theme, welche Inhalte unter wp-content/themes/name-des-themes platziert wird.

Inhalt Repository

Die Prozess-Schritte

Im Idealfall läuft ein Deployment wie folgt ab: Es wird ein Backup der Datenbank und der aktuellen Installation erstellt. Danach wird der Maintenance-Mode aktiviert und die neue Version des Themes platziert. Der Maintenance-Mode wird wieder deaktiviert und es wird geprüft, ob die Webseite korrekt dargestellt wird.

Um dies umzusetzen werden in die Pipeline folgende Aktionen konfiguriert.

  • SSH-Zugriff (um Backups durchzuführen und Maintenance-Mode anzuschalten)
  • NodeJS (für das Kompilieren des Themes via gulp)
  • SFTP (Transfer auf den Server)
  • SSH (um Maintenance-Mode wieder zu deaktivieren)
  • Ping, Website-Aufruf oder Link-Validator (um Zustand der Webseite mit neuer Theme Version zu prüfen)

Konfigurierte Pipeline

SSH-Zugriff

In der Aktion SSH sind diverse Einstellung zu tätigen. So ist es neben den natürlich auszuführenden Befehl notwendig, die Daten des Servers für den SSH-Connect einzutragen. Auch kann konfiguriert werden, in welchem Ordner der Befehl ausgeführt wird.

NodeJS

In der NodeJS-Umgebung ist ebenfalls wieder der auszuführende Befehl notwendig – in unserem Fall die Kompilierung mittels gulp. Jedoch kann auch die NodeJS-Version konfiguriert werden.
Achtung: Die Befehle werden im Repository ausgeführt, welches in der Pipeline zwischengespeichert wird.

SFTP-Upload

Der wohl wichtigste Befehl ist der SFTP-Upload. Hier müssen natürlich wieder die Daten der SFTP-Verbindung eingetragen werden. Auch kann eingestellt werden, ob der Upload vom Repository-Hoster oder vom zwischengespeicherten Repository in der Pipeline durchgeführt wird. Natürlich macht es bei nur Sinn, dass der Upload aus dem zwischengespeicherten Repository geschieht, da dort schon die Kompilierung durchgeführt wurde.
In unserem Testprojekt laden wir also die Inhalte des Ordners theme mittels SFTP auf den Server dort hin, wo die vorherige Version des Themes liegt.

Prüfung der Webseite

Hier gibt es viele mögliche Aktionen. So wäre ein einfache Status-Abfrage der Webseite möglich. In dem Testprojekt sind wir jedoch etwas breiter aufgestellt. So soll getestet werden, ob die Webseite noch schnell genug ist und alle Links stimmen (nicht, dass das Theme einen Fehler hat und gewissen Seiten nicht aufrufbar sind).

Dazu nutzen wir Lighthouse und Link-Validator. Google Lighthouse prüft dabei die Leistung, Geschwindgkeit und Suchmaschinenoptimierung der Webseite. Es kann hier ein Schwellenwert definiert werden, ab wann die Aktion abgebrochen werden soll. Beim Link-Validator geben wir unsere Basis-URL an und die Tiefe, in welcher nach fehlerhaften URLs gesucht wird.

Konfiguration von Schwellenwerten für Google Lighthouse-Test

Ausführen der Pipeline

Die fertig konfigurierte Pipeline kann mittels verschiedener Möglichkeiten ausgeführt werden. So kann sie manuell angestoßen werden, jedoch auch automatisch loslaufen, wenn ein Git-Push durchgeführt wird. Auch kann konfiguriert werden, aus welchem Branch sich der Code geholt werden soll.

Einsatz in der Praxis

Uploads von WordPress-Themes mittels FTP-Tool gehören dank Einsatz von buddy.works der Vergangenheit an. Mittels weniger Klicks und einfacher Konfigurationen lassen sich Deployments automatisieren und dabei die Qualität erhöhen und das alles direkt aus dem Repository heraus.

Doch nicht nur Deployments einfacher Webprojekte lassen sich damit umsetzen. Anhand der Vielzahl von Aktionen sind auch Umsetzungen von Deployments für App-Entwicklung (inkl. automatischen Bereitstellen der App im Google PlayStore) leicht möglich.