Webhook-Konfiguration automatisieren

Webhook-Konfiguration automatisieren

Ich habe mir ein paar Gedanken dar├╝ber gemacht, wie ich mein automatisches Deployment noch ein wenig verbessern k├Ânnte.

In meinem Artikel ├╝ber GitLab-Webhooks habe ich beschrieben, wie man mit wenigen Schritten den eigenen Deployprozess vereinfachen kann. Findet ein Push in einem GitLab-Projekt statt, wird ein Webhook aufgerufen, der sich daf├╝r sorgt, dass das neue Update auch Stage- oder Liveserver landet.

In meiner L├Âsung benutze ich ein PHP-Script, welches ein Konfigurationsdatei ausliest, um festzustellen, ob das Projekt, welches den Webhook aufruft, bekannt ist und wenn ja, welche Branches deployt werden sollen.

Mit der L├Âsung bin ich immer noch sehr zufrieden, allerdings st├Ârte es mich sehr, dass ich

  1. immer das Grundverzeichnis f├╝r ein neues Projekt im Apache-Document-Root von Hand anlegen und entsprechende Rechte setzen musste.
  2. die Deploy-Konfiguration von Hand erweitern musste.

Da die Konfiguration in meinem Fall fast immer die gleichen Werte enth├Ąlt, bis eben auf den Pfad und den Namen des Projektes, habe ich versucht das Erstellen ein bisschen zu vereinfachen.

addProject Bash-Script

Ich habe mir also ein kleines Bash-Script geschrieben, was mir ein bisschen Arbeit abnimmt.

  • Es erstellt das Grundverzeichnis des Projektes im Document-Root.
  • Es erweitert die Deploy-Konfiguration mit Standardparametern und passt automatisch den Pfad und den Projektnamen an

Damit es nicht zu Dublizierungen kommt, oder wohlm├Âglich etwas ├╝berschrieben wird, pr├╝ft das Script auch noch, ob das Projekt bereits vorhanden ist.

#!/bin/bash

cd /var/www/
if [ ! -d "$1" ]; then
    mkdir -p "$1/logs"
    chown YOURUSERNAME:www-data $1-$2
    chmod -R 775 $1
    cd /var/www/DEPLOYSCRIPTDIRECTORX/
    head -n -2 deploy.json > temp.txt ; mv temp.txt deploy.json
    printf "\t},\n\t\"$1\": {\n\t\t\"path\":\t\t\"/var/www/$1\",\n\t\t\"limit\":\t\"master\"\n\t}\n}" >> deploy.json
else
    echo Project already exists!
fi
exit

Und so funktioniert es

Um das Script aufzurufen, gibt an in der Shell folgenden Befehl ein:
/path/to/script.sh projectTitle

In meinem Script gibt es noch einen zweiten Parameter, der die Auftragsnummer des Projektes enth├Ąlt, welche mit im Verzeichnisnamen auftauchen soll, das habe ich hier aber weg gelassen. Theoretisch k├Ânnen weitere Paramter aber einfach mittels $2, $3, $4 ÔÇŽ┬áabgefragt werden.

Der obige Befehl w├╝rde das Verzeichnis projectTitle in /var/www erstellen.

Der Ablauf

Zun├Ąchst wechselt das Script in das Document-Root vom Apache, bei mir ist das /var/www kann aber auch z.b. /srv/http sein, das sollten Sie ggf. in Zeile 3 und 10 anpassen (bei mir kommt z.B. noch ein bisschen was hinten dran, weil ich nicht alles einfach im Document-Root liegen habe)

Dann wird gepr├╝ft es bereits ein Verzeichnis mit dem gew├╝nschen Namen gibt. Ist das der Fall, wird das Script mit einer entsprechenden Meldung beendet. Ansonsten geht es weiter.

Das Verzeichnis wird erstellt und die entsprechenden Rechte gesetzt. Damit das Deploy-Script sp├Ąter auch ins Verzeichnis schreiben kann, wird die Gruppe auf www-data gesetzt und der Gruppe Schreib- und Ausf├╝hrrechte gegeben. L├Ąuft der Webserver oder das Deploy-Script unter einem anderen User, muss dessen Gruppe gesetzt werden. Au├čerdem wird im Verzeichnis noch ein logs-Verzeichnis erstellt.

Danach wechselt das Script in das Verzeichnis in die dem Deploy-Konfiguration liegt und erweitert diese. Zun├Ąchst werden die letzten beiden Zeilen gel├Âscht, das ist die schlie├čende Klammer des JSON und die schlie├čende Klammer des letzten Projektes.
Dann bekommt das letzte Projekt eine neue schlie├čende Klammer, gefolgt von einem Komma (damit der neue Eintrag folgen kann).
Schlie├člich wird der eigentliche Eintrag angelegt, der Projektname wird geschrieben, der Pfad gesetzt und als Standardeinstellung wird der master-Branch als limit gesetzt, so dass nur dieser deployt wird. Sollen alle Branches deployt werden, muss an entsprechender Stelle im Script das master gegen null getauscht werden (oder auch z.b. stage, master)
Schlie├člich wird die schlie├čende Klammer f├╝r das JSON noch gesetzt.

Damit ist das neue Projekt eingerichtet und kann benutzt werden. Ich habe das Script in mein GitHub-Repository gelegt, viel Spa├č damit!

0
0
blog comments powered by Disqus