Gitlab CI/CD mit WordPress nutzen

Um an einem Theme oder Plugin für WordPress zu arbeiten kann es sehr nützlich sein, wenn man sich nicht um das Bereitstellen auf dem Server kümmern muss, sondern sich um das Wesentliche kümmer. Den Code.

Um mit mehreren Entwicklern an einem Projekt zu arbeiten hat sich gitlab bisher sehr bewährt. Doch wie bekommt man das Theme oder das Plugin am besten aus git auf den eigenen Server, und das am besten ohne die git spezifischen Dateien wie die im versteckten Ordner .git?

Dazu kann man sich der CI/CD Funktion in gitlab bedienen. Dort kann man dafür sorgen, das bei einem merge in den master Branch, oder auch im production Branch, je nach dem wie man arbeitet, das alle Daten die man benötigt automatisch auf den eigenen Server kopiert werden.

Wie richte ich CI/CD ein für automatisches kopieren der Daten auf meinen FTP Server?

Als erstes muss man sich die Zugangsdaten für den FTP Server zurecht legen, damit man dem CI/CD Prozess sagen kann wo es hin gehen soll.

Wenn diese Informationen vorhanden sind kann man starten.

1. Klick im Git Projekt im Menü auf CI/CD. Wenn noch keine Pipeline gestartet wurde, auf den Button “Get started with Pipelines” klicken. Auf der folgenden Seite findet man ein paar grundsätzliche Informationen zu den Gitlap CI/CD Pipelines. Sich das einmal durchzulesen schadet auf keinen Fall.

2. Damit unsere Zugangsdaten in der .gitlab-ci.yml Datei genutzt werden können, aber diese Informationen gut geschützt sind legt man am besten Sichere Variablen im Gitlab Projekt an, die dann in der .yml Datei genutzt werden können.

In diesem Beispiel werden folgende Variablen benötigt:

HOST // Die Server Adresse zum FTP Server
USERNAME // Der FTP Nutzername
PASSWORD // FTP Passwort
FTP_FOLDER // Zielpfad auf dem FTP Server 
REPRO_FOLDER // Pfad im Git zum Ordner der synchronisiert werden soll.

Anlegen könnt Ihr diese Variablen im Git unter Settings / CI/CD. Dort den Bereich Variables aufklappen und die Variablen anlegen.

3. Jetzt muss die .gitlab-ci.yml Datei erstellt werden. Legt diese Datei im root Ordner des Projekts an. In die Datei muss folgendes eingetragen werden:


stages:
  - deploy
deploy:
  stage: deploy
  tags:
    - gitlab-org
  image: mwienk/docker-lftp:latest
  script:
    - lftp -c "set ftp:ssl-allow no; open -u $USERNAME,$PASSWORD $HOST; mirror -Rnev ${REPRO_FOLDER} ${FTP_FOLDER} --ignore-time --parallel=10 --exclude-glob .git* --exclude .git/ --exclude .env"
  only:
    - master

Diese Datei muss dann nur ins Git gepusht werden.


git add .gitlab-ci.yml
git commit -m "add gilab ci yml file"
git push

Probleme

Runner Problem

Wenn ihr Probleme habt den deploy laufen zu lassen, prüft unter Settings / CI/CD im Tab Runner welche Shared Runners tags zur Verfügung stehen. Ändert dann evtl. den Wert bei deploy: tags zu einem verfügbaren Runner Tag.

Wenn Ihr das gemacht habt und jetzt einen neuen merge request in den master Branch macht, wird die Pipeline automatisch starten und die Daten aus dem angegebenen REPRO_FOLDER auf euren FTP Server in den FTP_FOLDER synchronisieren.

Unknown Command ‘domain.de’

Sollte es zu Fehlermeldung: Unknown command `domain.de’. kommen, dann liegt das meistens daran das im Passwort Sonderzeichen sind, die dazu führen das der Server denkt das ein neuer Befehl beginnt. Entweder ändert Ihr dann das Passwort oder ihr müsst die Sonderzeichen mit \ als “echtes” Zeichen maskieren.

Ein weiterer Grund könnte sein das lftp Probleme mit der Auflösung von IPv4 und IPv6 hat. In diesem Fall kann man statt der URL die IP zum FTP Server eingeben. Damit sollte das Problem der Auflösung nicht mehr existieren.