Export SVN –> répertoire web

Aujourd’hui, je partage avec vous un petit script maison, pour exporter la révision la plus récente (HEAD) d’un dépôt SVN vers un répertoire  de votre serveur, accessible depuis le web.

Quelle utilité ?

Et bien simplement parce que je développe en ce moment 3 projets de sites web, qui sont tous les 3 versionnés sur mon petit serveur à la maison. Sauf que le dépôt SVN en lui-même n’est pas accessible depuis le web, et que j’ai besoin de tester régulièrement ce que je fais, et surtout de permettre au commanditaire d’un des projets de voir en temps quasi-réel où j’en suis. Du coup, un petit script comme ça dans le cron, c’est bien pratique !

Comment ça fonctionne ?

Pour faire simple, j’utilise la commande de SVN pour exporter le dépôt vers un répertoire, ici « svnexport ». Ensuite, j’utilise rsync pour synchroniser l’export fraîchement créé avec le dossier de destination, celui qui est accessible par votre serveur web, Apache ou autre. C’est franchement tout bête, mais bien utile tout de même.

Le code !

C’est ça le plus intéressant, non ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
# Script d'export d'un dépôt Subversion vers un répertoire web
#
# Maxime Auvy
# http://open-freax.fr/
#
# Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou
# le modifier conformément aux dispositions de la Licence Publique Générale
# GNU, telle que publiée par la Free Software Foundation ; version 2 de la
# licence, ou encore (à votre choix) toute version ultérieure.
#
# Ce programme est distribué dans l’espoir qu’il sera utile, mais
# SANS AUCUNE GARANTIE ; sans même la garantie implicite de
# COMMERCIALISATION ou D’ADAPTATION A UN OBJET PARTICULIER.
# Pour plus de détails, voir la Licence Publique Générale GNU.
#
# Donc on est bien d'accord, si ce script déclenche une guerre nucléaire,
# ou autre inconvénient notable, c'est pas moi.
#
HOMEDIR='/var/svn'
SVNHOST='mon-serveur.tld'
SVNURL='projet'
SVNUSER='monpseudo'
SVNPASS='xxxxx'
PUBLIC_HTML='/var/www/latest'
rm -Rf $HOMEDIR/svnexport
svn export svn://$SVNHOST/$SVNURL --non-interactive --username $SVNUSER --password $SVNPASS --trust-server-cert --force $HOMEDIR/svnexport
rsync -avz --delete-after $HOMEDIR/svnexport/ $PUBLIC_HTML

Voilà. Ce qu’il faut adapter :

  • HOMEDIR correspond au chemin du répertoire de destination de l’export temporaire, avant rsync
  • SVNHOST correspond à votre nom de domaine
  • SVNURL correspond au nom de votre dépôt. Si votre dépôt SVN est du genre svn://mondomaine.fr/projet alors il vous faut ici saisir « projet »
  • SVNUSER & SVNPASS sont vos identifiant/password pour accéder au dépôt
  • PUBLIC_HTML correspond au chemin du répertoire où seront synchronisés les fichiers. C’est le dossier dans votre serveur web !

Vous pouvez bien sûr adapter la commande svn à votre cas, si vous utilisez un certificat SSL, si vous servez votre dépôt via Apache… N’oubliez pas de l’ajouter à votre crontab si vous voulez automatiser la chose, pour ne pas avoir à lancer ça à la main via SSH à chaque commit !

Et puis vous pouvez toujours utiliser ça pour sauvegarder une copie de votre dépôt SVN sur un autre serveur de sauvegarde ! 😉

N’hésitez pas à me faire part de vos idées d’amélioration, d’évolution… ça peut donner un bon truc ! 🙂

2 réflexions sur “ Export SVN –> répertoire web ”

  • 27 mars 2013 à 22 h 30 min
    Permalink

    Quelques idées (tirées de celui que j’utilise)…

    export_rev= »HEAD »
    export_from= »trunk »
    rsync_options= »-pguroi »

    while getopts « hfr: » OPTION
    do
    case $OPTION in
    r)
    export_rev=$OPTARG
    ;;
    f) #force rsync update
    rsync_options = »-qpgroi »
    ;;
    h)
    printf « Usage: %s: [-r revision] [-f]\n » $0
    exit 2;;
    esac
    done

    svn export -r $export_rev svn://$SVNHOST/$SVNURL/$export_from $export_from $HOMEDIR/svnexport

    time rsync $rsync_options –delete $HOMEDIR/svnexport $PUBLIC_HTML

    A minima, tu devrais ajouter le –delete à rsync !

    Réponse

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *