SVN auto update (anche su Dreamhost)

Lavorare con SVN offre moltissime comodità, dallo sviluppo di gruppo, alla gestione delle revisioni, alla possibilità di fare fork del proprio ramo di sviluppo per gestire più versioni.

Un’ulteriore comodità che ho scoperto da poco è la possibilità di attivare dei trigger quando vengono compiute particolari azioni (ad esempio un commit).

Ponete di avere il server SVN sulla stessa macchina dov’è presente il server web di sviluppo, cosa ci sarebbe di più comodo ed efficente di avere una versione bleeding-edge online ogni volta che fate un commit? Ma non solo, infatti potete creare degli script per eseguire automaticamente le unit test ad ogni modifica o per inviare email alla ML di sviluppo per avvertire della presenza di aggiornamenti, etc.

Per farlo bastano pochi passi.

Supponiamo che abbiate correttamente configurato il vostro repository SVN usando l’autenticazione con apache-webdav e che vogliate fare in modo che il sito presente sullo stesso server (diciamo in /var/www/html/sito) sia aggiornato ogni volta che da remoto fate una commit.

Riprendendo la struttura delle directory del tutorial precedente andate in /var/svn/repos/progetto1/hooks e copiate il file post-commit.tmpl in post-commit avendo l’accortezza di settare anche permessi in esecuzione per lo stesso (almeno per l’utente apache/www-data).

A questo punto aprite il file in questione e modificatelo in questo modo

#!/bin/sh
REPOS="$1"
REV="$2"

# decommentando la riga successiva permetto 
# ad svn di mandare un'email ad ogni 
# aggiornamento alla ml di sviluppo
# /usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" xxxxxx-devel@xxxxx.xxx

# le seguenti righe fanno aggiornare in automatico
# il sito all'ultima bleeding edge in realtà potrei far
# eseguire qualsiasi script per fare le code più disparate
cd /var/www/html/sito
svn up

ricordatevi che su tutto il path del sito l’utente apache/www-data (in base alla distro che state usando) deve avere permessi di lettura e scrittura e che al suo interno sia stato fatto il checkout del vostro repo (altrimenti l’svn update non serve a nulla ;) ).

Se volete applicare la stessa cosa a dreamhost, chessò per aggiornare in automatico tutte le installazioni di wordpress fatte nel vostro account (magari con i temi e plugins personalizzati e minchiate simili) la soluzione è un pò più complessa. Infatti dovrete compilare lo script hook di post-commit in modo che abbia i permessi di esecuzione per apache dell’hosting provider, per farlo è necessario compilare lo script in c presente sul wiki ufficiale linkandolo poi allo script bash vero e proprio con i comandi che volete far eseguire.

  • Kea

    Ehm come dire… mi sento un po’ responsabile del tuo interesse ;)

  • Molto utile! Cercavo proprio qualcosa del genere…

  • Ciao Fullo,
    stavo rileggendo dinuovo il post… non mi torna l’svn up.
    Non sapere meglio un svn export ?
    In questo modo si evita di tenere sul webserver tutte le dir .svn

  • beh se è un server di sviluppo non cambia molto avere o meno le dir .svn mentre se è un server pubblico basta usare una regola di .htaccess per impedire l’accesso alle stesse dal web.

    e comunque data la flessibilità di post-commit nulla ti vieta di scrivere uno script che faccia l’export in una directory pubblica ;)

%d bloggers like this: