Author Archive
Synchroniser, migrer ou “backuper” un serveur SVN de Linux vers Windows
par Jean-françois JOLY le nov.10, 2010, dans Developpement Web
Dans le cadre de mes tests sur l’intégration continue, a un moment j’ai eu besoin de trouver une solution pour dupliquer les données d’un dépôt SVN, tout en conservant l’historique.
Difficulté supplémentaire : le serveur source est sous linux et je n’y connais pas grand chose, le serveur cible pour mes tests est sous Windows (parce que je suis un fan du click click
).
1ère étape : Installer SVN sous Windows
Il s’agit de la partie la plus simple, puisque j’ai opté pour la solution de facilité :

Voilà un petit soft bien sympa qui se propose d’installer SVN ainsi qu’une surcouche graphique pour simplifier l’administration sur les opérations les plus courantes. D’ordinaire installer SVN consiste à installer le serveur SVN, puis généralement apache pour l’accès web, puis créer en ligne de commande les dépôts & Cie. Avec Visual SVN, double click sur l’installeur, suivant, suivant, suivant et bingo. Après il ne reste plus qu’à créer un dépôt avec l’assistant et de la même manière créer un utilisateur. Pas besoin de connaitre la syntaxe ou l’endroit dans lequel doit être mis le fichier qui stocke les mots de passe & Cie.
Maintenant que l’installation est faites, il ne vous reste plus qu’à créer un dépôt (sans structure de base pour la migration). ainsi qu’un utilisateur.
Pour la suite, il peut être intéressant de rajouter le chemin de visualSVN/bin dans le path Windows, afin de pouvoir taper directement des commandes sous DOS si besoin.
Pour cela, rien de plus simple :
Là, il ne reste plus qu’à redémarrer la session pour prendre en compte ce nouveau chemin et vous êtes prêt pour la phase suivante.
2ème étape : Créer un dépôt synchronisé.
Alors en fait, il existe plusieurs méthodes pour migrer les données de son serveur vers un autre :
- Faire un dump sur le serveur source puis l’importer sur le serveur de destination :
1
svnadmin dump “chemin du repositery a dumper” > “fichier qui contient le dump”
- Utiliser la HotCopy (Je n’ai pas testé car il parait que ce n’est pas recommandé) :
svnadmin hotcopy - Utiliser la synchronisation (c’est la méthode que je vais utiliser).
Pour moi la méthode la plus simple, la plus pratique et qui peut présenter pas mal d’avantage, c’est la synchronisation. Elle a toutefois un inconvénient : elle est assez lente.
Parmi les avantages : on peut très bien utiliser cette méthode pour effectuer un backup distant synchronisé, ce qui est quand même beaucoup moins barbare que de faire un dump tous les soirs.
Passons à la pratique !
pré requis :
- L’accès au SVN source (URL + utilisateur autorisé).
- Un dépôt vide sur le serveur de destination (voir 1ère étape), dans la suite on va considérer que notre projet s’appelle SVN_migration le chemin devrait donc être quelque chose comme : C:\Repositories\SVN_migration.
- Une console DOS sur le serveur de destination.
Action :
- Ajouter un fichier vide nommé pre-revprop-change.bat dans le répertoire C:\Repositories\SVN_migration\hock
- Taper cette commande (sur le serveur de destination) pour initialiser la synchronisation :
(je pars du principe qu’on se connecte sur un serveur svn via http ou https, mais ça marche aussi avec le protocole svn ou file)1
svnsync init file:///C:/Repositories/SVN_migration http://svn.monsite.fr/repository/myproject/
Remplacer "http://svn.monsite.fr/repository/myproject/" par l’adresse de votre dépôt. Normalement, svn va vous demander les infos de connections, une fois ces infos rentrées.
Si vous avez correctement ajouté le chemin des binaires SVN, vous pouvez taper la commande n’importe où, sinon il faut se placer dans le répertoire c:\program files\VisualSVN\bin.
Si vous avez ajouté le fichier bat précédent, vous n’aurez pas d’erreur, autrement il vous signalera que ce fichier est manquant : "svnsync: Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook"
Si tout se passe bien, vous devrier avoir le message : "Copied properties for revision 0."
- Maintenant que la synchro est initialisée, il n’y a plus qu’à lui dire de se synchroniser complètement :
1
svnsync sync file:///C:/Repositories/SVN_migration
Et c’est parti, chaque révision va être synchronisée, vous avez le temps d’aller prendre plusieurs cafés selon la taille du projet et le nombre de branches.
Voilà, vous pouvez bien sur utiliser la même technique pour migrer d’un Windows vers linux ou d’un linux vers linux
. Personnellement je trouve cette technique plutôt sympa pour faire des backup sur un un autre serveur au cas ou, puisque une fois la première synchro passée, il n’y a plus qu’à retaper la même commande pour faire des backups réguliers et rapides.
Monter un serveur d’intégration continue sous windows 2008 server – Introduction
par Jean-françois JOLY le sept.17, 2010, dans Developpement Web, Outils
Comme ça fait longtemps que je n’ai rien écrit, je vais m’amuser à faire une petite série d’articles ces prochains jours, sur l’installation d’outils indispensables pour le travail en équipe.
Bon ce n’est pas super innovant, je vais donc essayer de faire un truc sympa en faisant un petit guide pas à pas de l’installation d’un ensemble d’outils sous windows 2008 server plutôt que le sempiternel linux.
Chez moi point de apt-get et autres rpm ou wget, mais que du bon vieux click avec un chouia de ligne de commande DOS (même pas de power shell)
.
Le but du jeu va être d’utiliser windows pour gérer un projet PHP avec :
- Gestion des sources via SVN.
- Gestion du projet et de la qualité du code via maven/sonar.
- Utiliser sélénium pour lancer des tests fonctionnels (via Selenium RC et phpunit).
- Gestion du tout via Hudson, qui s’occupera de lancer le build du projet.
Alors avant toute chose pour pouvoir suivre le futur guide, il conviendra de faire les choses simplement : Pour tester, rien ne vaut une machine virtuelle, ça évite beaucoup de soucis.
Personnellement, j’utilise virtualBox qui fonctionne parfaitement bien :
Vous pourriez éventuellement avoir besoin d’un windows server 2008, que vous trouverez en version d’évaluation chez microsoft en cliquant ici :
Je ne vais pas détailler l’installation, il suffit de créer un disque virtuel, de booter sur l’install de windows server 2008 et de faire suivant, suivant, suivant … en suivant les instructions éventuelles.
Une fois votre windows installé vous serez prêt à tester le reste.
La suite dans le prochain billet ^^
Comment interdire une suppression MYSQL avec un Trigger
par Jean-françois JOLY le mar.29, 2010, dans Developpement Web
Récemment il s’est posé à moi une problématique très spécifique : Interdire une suppression dans une table qui est potentiellement consultable par plusieurs sources différentes. Bien sur ces sources ont toutes le maximum de droits et peuvent donc effectuer des requètes de suppression. Il se trouve que mystérieusement, des enregistrement de la table disparaissent tous les soirs … Il faut donc trouver une solution pour interdire la suppression dans cette table sans changer les droits. La solution la plus logique est d’utiliser un trigger pour interdire la suppression. Bien sur, sous oracle ou sql server, il aurait suffit de faire un simple RAISERROR u peu de cette manière :
1 2 3 4 5 6 | CREATE TRIGGER forbidden_delete BEFORE DELETE ON matable FOR EACH ROW BEGIN RAISERROR ('Suppression interdite sur cette table', 16, 1); ROLLBACK TRANSACTION; END; |
Seulement voilà, je ne travaille pas sur du oracle ou du sql server, mais sur du mysql et RAISERROR ça n’existe pas (enfin à ma connaissance) sur la version 5.0.84. Du coup il faut trouver une alternative simple. Après moultes recherches, l’alternative existe : Pour faire échouer la requète de suppression, il faut faire planter le trigger. Si le trigger plante, la requète ne s’effectue pas. Qu’à celà ne tienne, voilà un excellent moyen de faire planter un trigger :
1 2 3 4 5 6 7 8 | DELIMITER // DROP TRIGGER IF EXISTS forbidden_delete// CREATE TRIGGER forbidden_delete BEFORE DELETE ON matable FOR EACH ROW BEGIN SELECT 'a' INTO @toto; SELECT 'b','c' INTO @toto; END;// |
A chaque delete sur la table matable, la requète de suppression va lamentablement échouer car le trigger va échouer.
Voilà c’était l’astuce du jour en espérant qu’elle soit utile à quelqu’un
.
A la recherche de quelque chose ?
Utiliser ce champs pour faire votre recherche :
Vous n'avez pas trouvé votre bonheur ? N'hésitez pas à contacter l'auteur de ce blog ou alors laissez un commentaire sur un post !
Les liens !
Quelques liens intéressants...
Les archives
Tout, classé par ordre chronologique ...

