Installation von »relayServer« und »gitlabhook«-Server
Es wird beschrieben, wie die Software »relayServer« zu installieren ist, desweiteren die Installationsschritte zum Aktivieren der automatischen Aktualisierung durch Kontaktaufname per GitLab mit dem zugehörigen Git-Repositoriums.
Es wird davon ausgegangen, dass bereits auf einem anderen Rechner (hier: »i75434«) eine korrekt funktionierende Installation existiert, die zum eigenen Rechner (hier: »XXXXXX«) übertragen werden soll.
Folgendes ist mit root-Privilegien zu tun:
»gitlabhook«-Server
zypper rm nodejs-gitlabhook # falls vorhanden gewesen
npm install gitlabhook -g
# systemd-Datei
scp i75434:/usr/lib/systemd/system/gitlabhook.service /usr/lib/systemd/system/
# Konfigurationsdatei des gitlabhook-Servers
scp -r i75434:/etc/gitlabhook /etc/
# Script zum Transferieren des Repositoriums-Inhalt
scp -r i75434:/usr/local/share/getGitLabFiles /usr/local/share/
# Start des gitlabhook-Servers
systemctl enable gitlabhook.service
systemctl start gitlabhook.service
systemctl status -l gitlabhook.service # Test
»relayServer«
zypper rm relayServer # falls vorhanden gewesen
# Code des relayServers
scp -r i75434:/usr/local/share/relayServer /usr/local/share/
chown -R wwwrun.www /usr/local/share/relayServer
# systemd-Datei
scp i75434:/usr/lib/systemd/system/relayServer.service /usr/lib/systemd/system/
# Start des relayServers
systemctl enable relayServer.service
systemctl restart relayServer.service
systemctl status -l relayServer.service # Test
Das Datenbankdokument »000_SERVERS« in der Datenbank »vl_db« auf dem Server
»a73434« muss für den betreffenden Rechner einen Eintrag "require"
bekommen
(siehe entsprechender Eintrag für »i75434«). Die Datenbank »vl_db« wird
automatisch zu anderen Rechnern repliziert.
Test
ls -l /usr/local/share/relayServer/log.txt
systemctl restart relayServer.service
ls -l /usr/local/share/relayServer/log.txt
Die Datei »log.txt« muss sich erneuern.
Im GitLab-Repositorium »relayServer« ist unter »Settings« / »Web Hooks« der betreffende Rechner als
http://XXXXXX.berlin.ptb.de:3420
mit Haken bei »Tag push events« anzumelden.
Wenn alle Komponenten erfolgreich zusammenspielen, wird das Verzeichnis
/usr/local/share/relayServer
bei den folgenden Ereignissen aktualisiert,
indem der Inhalt des Branches »production« vom Git-Repositoriums »relayServer«
dorthin kopiert wird:
- beim Booten des Rechners:
systemctl start relayServer.service
- beim Neustart von »relayServer«:
systemctl restart relayServer.service
- bei neuem Release-Tag im GitLab-Repositorium von »relayServer«
Die Angaben auf dieser Seite gelten für ein systemd-basiertes Betriebssystem (z.B. »openSUSE >= 13.1«). Bei »Ubuntu 14.04« muss teilweise anders vorgegangen werden (derzeit noch unklar).
Ablauf der automatischen Verteilung der relayServer-Dateien
Zusätzlich zu den erwähnten Installationsschritten spielt im lokalen
Repositorium die Datei post-commit
eine Rolle. Damit sie wirksam wird, muss
einmalig Folgendes getan werden:
cd .git/hooks/
rm post-commit
ln -s ../../post-commit
(Per Symlink, da direkte Versionierung unterhalb von .git
nicht unterstützt
wird.) Der Ablauf ist der folgende:
- Im lokalen Repositorium:
- Test, ob sich der aktuelle Eintrag »"version": "xx.x.x"« in der Datei »package.json« gegenüber dem vorigen commit geändert hat. Im positiven Falle werden die weiteren Schritte ausgeführt.
- Checkout des branches »production«
- Mergen des branches »production« mit »master«.
- Taggen des branches »production« mit der neuen Versionsnummer.
- Push + Tag Push des branches »production« zu GitLab
- Rückkehr zu »master«.
- Auf GitLab:
- Bei empfangenem »Tag Push« Hinweis an alle eingetragenen GitLabHook-Server der Satelliten senden.
- Auf den »Satelliten«:
- Auswerten des Hinweises von GitLab und daraufhin Anfordern eines tar-Archives mit dem enthaltenen branch »production«.
- Auspacken unterhalb von »/usr/local/share«
Das heißt, dass man nur die Versionsnummer in »package.json« zu ändern braucht
(ergänzt von git commit ...
), um die ganze Maschinerie in Gang zu setzen. Ein
systemctl restart relayServer.service
vor Ort ist allerdings auch noch nötig. Gelegentliches Neubooten hat denselben Effekt.