SVN Hook – Workaround für Domainfactory-Server

Wenn Ihr eure Webseiten mit SVN verwaltet, dann kennt Ihr sicher folgendes Problem:

Nach einem größerem Commit ins Repository möchte man anschließend noch die Liveversion des Projektes aktualisieren und dazu macht man in der Regel einen Export der Projektdateien und kopiert diese anschließend via. FTP auf den Webserver.

Nun sind Programmierer oftmals sehr bequeme Menschen und daher gibt es unter SVN die so genannten Hooks. Das sind Aktionsplatzhalter, die zu bestimmten Zeitpunkten, wie z.B. nach einem Commit, vom SVN Server ausgeführt werden.

Man könnte jetzt also mit Hilfe eines solchen Hooks seine Liveversion der Website automatisch nach einem Commit vom Server aktualisieren lassen und somit wäre man als Entwickler auch nicht mehr gezwungen mehrere Verzeichnisse zu pflegen.

Soweit die Theorie und eigentlich funktioniert das Prinzip auch fehlerfrei, wenn man seinen Managed Server nicht bei DomainFactory betreibt, denn dort ist die Ausführung von chown auf dem System nicht gestattet und somit lassen sich für die Dateien wie z.B. post-commit nicht die Besitz- und Gruppenrecht ändern. Das ist jedoch zwingend Vorraussetzung dafür, dass der Hook auch als Apache-User ausgeführt wird.

Eine Anfrage an die Technik ergab lediglich, dass die Nutzung von chown aus Sicherheitsgründen nicht gestattet wird und auch einzelne Ausnahmen wie für einen SVN Server seien hier nicht möglich. Gut…nur wie kann man nun ohne einen Providerwechsel diese Funktionen nutzen?

Ich bin dafür den kleinen Umweg über ein Shellscript in Verbindung mit einem Cronjob gegangen. Das bedeutet, ich habe zunächst auf dem Server eine lokale Arbeitskopie aus dem SVN ausgecheckt:

svn checkout file:///kunden/.../mein-repo /kunden/.../mein-zielordner

Anschließend habe ich den update – Befehl in einem Script ( svnupdate.sh ) untergebracht:

#!/bin/sh
cd /usr/bin/
svn update /kunden/.../mein-zielordner

Das Shellscript kopiert Ihr nun in ein beliebiges Verzeichnis auf eurem Server und legt einen Cronjob mit der gewünschten Ausführungszeit (z.B. 1x in 24 Stunden) auf die Datei und schon wird eure Liveinstallation wie von Geisterhand aktualisiert.

Zwar ist diese Lösung nicht ganz so komfortabel wie über das SVN direkt, denn schließlich wird nicht nach jedem Commit ein Update durchgeführt, aber für meine Zwecke ist das Ganze durchaus ausreichend und vielleicht hilft dem ein oder anderen dieser Tipp ja weiter.

Ich habe im übirgen ganz bewußt keinen export aus dem Repository gemacht, da in einem solchen Fall die aus der Arbeitsplatzkopie gelöschten Dateien erhalten bleiben würden und so kann ich sicher sein, dass mein Liveordner immer exakt meiner Arbeitskopie entspricht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.