Export in den Webroot des Apache Webservers per Post-Commit von Subversion

Seit ein paar Tagen setze ich mich wieder intensiv mit dem Zend Framework auseinander und bastle an einer Applikation. Um meine Änderungen einfach nachzuverfolgen habe ich mir ein Subversion-Repository auf meinem Server eingerichtet. Um in verschiedenen Testumgebungen die Applikation testen zu können, soll diese automatisch in einen Webroot „deployed“ werden. Hierzu habe ich ein kleines Skript geschrieben, welches sind an den post-commit-Mechanismus von Subversion hängt und darüber den Export steuert.

Werbung


Die Funktionsweise ist simpel, es wird einfach ein Checkout des Repository gemacht and anschließend bei jedem commit ein „svn update“ auf das Checkout-Verzeichnis.
Zunächst wird daher in den Webroot gewechselt, wo das Update hin soll. Dort wird der Checkout ausgeführt:

svn co http://your.reposito.ry/trunk/ .

Dankbarerweise werden die Userdaten im Cache abgelegt, daher sollte man die .svn-Verzeichnisse über eine Direktive schützen, sodass diese nicht für Webserver-Nutzer abrufbar sind. Für den Apache sieht das so aus:

<DirectoryMatch "^/.*/.svn/">
    Order deny,allow
    Deny from all
</DirectoryMatch>

Doch nun zum eigentlichen Script. Dieses Skript legt man als „post-commit-export.sh“ im „hook“-Verzeichnis des SVN-Verzeichnisses auf dem Server ab:

#!/bin/sh
#############################################
# SVN-Deployment-Script for post-commit by: #
# Ulrich Wolf - https://wolf-u.li            #
#############################################
 
# Configure this:
# Where did you checkout your SVN?
EXPORTDIR="/var/www/your/export/webroot/"
# To which user should be chown?
USER="someuser"
GROUP="somegroup"
# Maximum number of tries to update while a lockfile is present?
MAXTRIES=10
# How long should the script wait until the next try?
WAITTIME=20
 
# Don't touch the stuff below!
REPOS="$1"
REV="$2"
LOCKFILE=".post-commit.lock"
 
T=0
SUCCESS=0
 
(
while [ $T -lt $MAXTRIES ]
do
   if [ ! -e $LOCKFILE ]; then
      trap 'rm -f "$LOCKFILE"; exit $?' INT TERM EXIT
      touch "$LOCKFILE"
      sleep 5
      svn update -r $REV $EXPORTDIR
      chown $USER:$GROUP -R $EXPORTDIR
      rm -f "$LOCKFILE"
      trap - INT TERM EXIT
      SUCCESS=1
      break
   else
      sleep $WAITTIME
      let T++
   fi
done
) > /dev/null 2>&1 &

Nun muss es noch eingebunden werden. Dazu muss in die Datei „post-commit“ folgende Zeile eingetragen werden:

hooks/post-commit-exporter.sh $1 $2

Die Dateien post-commit-exporter.sh und post-commit müssen dann noch mit dem Ausführungsbit gekennzeichnet werden:

chmod +x post-commit post-commit-exporter.sh

Und das wars 😉

Veröffentlicht von

Uli

IT-Nerd und Admin

4 Gedanken zu „Export in den Webroot des Apache Webservers per Post-Commit von Subversion“

  1. Hi nettes Script, hab das jetzt für mich mal benutzt – allerdings habe ich über ne stunde nach nem Fehler gesucht – anfangs gings nicht.

    Das Problem war: Der apache-user braucht auch ein SVN passwort sonst geht es nicht

    Daher muss an zeile 33 noch der Parameter:

    --password XYZXYZ

    sodass diese dann so aussieht:

    svn update -r $REV $EXPORTDIR –password XYZXYZ

    jetzt gehts 🙂

    1. Hi,
      danke für die Rückmeldung!

      Eigentlich werden die Nutzerdaten in dem Verzeichnise .svn zwischengespeichert. Ich würde aber dann auch noch den Parameter –user mitgeben, wenn es echt nicht gehen sollte 😉

      Bei mir läuft das Skript wie oben gezeigt nun schon seit einiger Zeit auf mehreren Repositories 😉

      Viele Grüße
      Uli

    1. Da hast du durchaus recht, ist die einfachere Option, sofern man ein plusminus kleines Repository hat. In diesem Fall hat das Repository aus Projektgründen rund 400MB gehabt und war deshalb etwas nervig immer per export rauszuballern 😉

Kommentare sind geschlossen.