demande d'aide pour configuration serveur svn ...

Eléphant du PHP | 112 Messages

28 mai 2009, 17:36

Bonjour à tous,

j'ai un problème concernant la configuration d'un serveur svn.
Je souhaiterais lier le repository au répertoire apache ou est contenu mes projets /var/www/.
Dans le but que les membres de l'équipe qui bosse sur un projet puisse directement mettre à jour le serveur de dev et puisse directement testé.

première question est ce possible ? je me suis posé la question car peut etre que svn à une arborescence de fichier spécifique et donc non identique que l'arborescence d'un projet sur la machine du dev.

De plus, il y a svn et websvn qui ont déjà été installé sur le serveur (distrib debian) mais ce n'était pas moi qui est fait l'install (la personne en question est partie de la boite - pr info je bosse dans une webagency).

Si la configuration est possible, pouvez vous m'indiquer les démarches à suivre ?

D'avance merci

PS: je ne suis pas un admin réseau donc n'y aller pas trop fort avec les termes techniques.
blog nouvelles technologies : http://www.jofischer.fr

ViPHP
ViPHP | 3300 Messages

28 mai 2009, 18:37

je pense qu'hywan pourras te répondre il est passé expert en subversion :)
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 4039 Messages

28 mai 2009, 19:24

Ouf, je pense que c'est une très très (très) mauvaise idée..

Le dépôt subversion ne doit être utilisé QUE par subversion, il ne PEUT y avoir d'autre accès au dépôt, sinon il ne sert à rien.

Par contre, ça ne veut pas dire qu'il n'y à pas de solution à ton souci. Le départ est bon, chaque développeur travaille sur un checkout local du code.

Il suffit en fait de créer un post-commit script, qui s'exécute après chaque commit, qui fera alors un export correct vers le site (pas un checkout). Peut-être quand même quelques tests unitaires avant de lancer l'export, histoire de s'assurer que ça marche comme il faut.

ca demande certes un peu de boulot et de réflexion, mais sur le long terme il y a tout à y gagner. Et plus on automatise et qu'on vérifie, plus on est tranquille. C'est green.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 112 Messages

01 juin 2009, 22:08

disons que le repository se trouve sur le même serveur ou l'on veut effectuer la mise en ligne de l'application.

Quand tu parles de "post commit script" tu parles de quoi comme script. est ce que tu as un exemple ou un tuto qui explique ça ? est ce que ça se fait via svn ou via un script à part ?
blog nouvelles technologies : http://www.jofischer.fr

ViPHP
ViPHP | 4039 Messages

01 juin 2009, 23:48

Subversion utilise des "hooks", ou des ancres en français. Très pratique pour exécuter des actions à certains moments bien précis.

Une page d'explicatifs:
http://www.clever-age.com/veille/blog/u ... rsion.html

C'est pas de la gnognotte, mais comme toute bonne pratique, avec un peu de travail en amont, on évite une quantité astronomique de soucis en aval.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 217 Messages

02 juin 2009, 07:30

Bonjour,
a mon avis les solutions les meilleurs à envisager sont l'utilisation de rsync ou de patch pour la mise à jour de l'espace web.
Éviter les terme trop technique est difficile, il vous faudra alors vous documenter sur les différentes solutions.

rsync est très simple d'emploi et rapide, de plus il conservera les dates de modification des fichiers et ne publiera que les fichier nécessitant de l'être.
Par contre, il vous faudra, sans doute, une petite interface web permettant de sélectionner la révision que vous souhaitez publier.
L'autre solution est à base de diff et de patch très rapide également. avec cette solution vous pouvez tester les patch avant de les appliquer, les appliquer puis regarder si tout fonctionne correctement dans le cas contraire vous aurez la possibilité de faire marche arrière en annulant la rustine.

La solution à éviter est un checkout sur l'environnement de production car les fichiers cachés .svn se retrouveront sur le serveur de production se qui pose un problème de sécurité et de place (les fichiers deviennent énormes au bout d'un moment).

Eléphant du PHP | 112 Messages

02 juin 2009, 11:50

pour répondre à ma première question qui était:
première question est ce possible ? je me suis posé la question car peut etre que svn à une arborescence de fichier spécifique et donc non identique que l'arborescence d'un projet sur la machine du dev.
après quelques recherchent, pour moi l'arborescence d'un projet sur svn est spécifique, donc inutilisable directement sur un serveur ou le projet est accessible, par exemple: ../www/, vous confirmez ?

Après quelques recherchent sur rsync et svn, j'ai trouvé un projet appelé fredistrano avec un screencastde présentation.

Cette appli permettrait de copié les fichiers d'un projet situé dans le repository vers l'environnement web.

Quelqu'un a t il déjà utilisé cette application ?
connaissez vous d'autres applications similaires ? (car j'ai peur que le projet ne soit pas vraiment mis à jour - dernière version Nov 2008)
blog nouvelles technologies : http://www.jofischer.fr

Mammouth du PHP | 1668 Messages

02 juin 2009, 16:07

Je suis ce sujet depuis son début car j'ai moi même un besoin
identique, vu qu'HyWaN, certifié grand pro de subversion, et
c'est un compliment, n'a vraisemblablement pas eu le temps
de passer sur le sujet, ou n'a pas eu le temps d'y répondre,
je me suis penché sur la question et j'ai donc suivit les liens
tout ça pour en arrivé au code suivant, je ne l'ai pas testé
et j'aimerais bien avoir un retour vu que c'est mon premier
script bash :

Code : Tout sélectionner

#!/bin/bash # Ce script bash est un "trigger" ou hook s'appliquant par # l'intermédiaire de subversion après un commit # Il à été réalisé par Katagoto ([email protected]) # Le 02-06-09 à 13h30 GTM + 1 avec le site : # http://www.clever-age.com/veille/blog/utilisation-des-hooks-avec-subversion.html #Cette ligne permet de se positionner dans le dépôt cd /var/subversion/TonProjet # Cette ligne permet de mettre à jour le serveur web via un update svn update /var/www # Cette ligne termine le script exit 0
D'ici quelques heures je vais tenté de le complexifier, cependant
ce script nécessite quelques petites choses :
  • Il doit être placé dans /var/subversion/TonProjet ou bien la ligne 10 est à mettre à jour, bien que je doute de son utilité (?)
  • Le dossier /var/www doit exister ou bien la ligne 13 est à mettre à jour
  • Le dossier /var/www doit avoir subit un checkout au moins, si non entrez svn checkout file:///var/subversion/TonProjet /var/www

Complément :

Pour des mesures de sécurité, je conseil d'ajouter dans un/le
(nouveau) fichier .htaccess à l'adresse /var/www/.htaccess
le code suivant qui va protéger le trunk/ contenu dans ce dossier,
s'il y a d'autres dossiers, merci de me les signaler et de les ajouter,
comme ce qui suit (/var/www/.htaccess) :

Code : Tout sélectionner

<Directory ~ "/trunk"> Deny from All </Directory> <Files ~ "\.svn$"> Deny from All </Files>
(Ce code ne marche pas sous Wamp, et je ne vois pas d'où
ça vient, désolé)

J'ai fait un svn update pour éviter l'accumulation inutile
comme le faisait très justement remarqué mojorisin
causé par svn checkout si on l'utilise de manière répété.

Voilà, j'attends vos retours, vos suggestions, vos critiques, vos
remarques, vous aiderez ainsi au moins deux personnes pour le
prix d'une :lol:

PS : Je n'ai rien testé
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 4039 Messages

02 juin 2009, 18:02

Kata.. il te reste de grosses lacunes en Svn.. trop pour pouvoir proposer un script, apparemment.

c'est quoi cette histoire d'update plutôt qu'un checkout ? Un checkout place une copie de travail sur un répertoire local. Un update permet d'actualiser la copie de travail.

Que tu proposes d'utiliser update plutôt que checkout n'a aucun sens. Et ta bidouille pour masquer les documents .svn montre seulement que tu n'as pas compris la remarque de mojorisin, puisque dans ton cas le répertoire /var/www EST un checkout (une copie de travail).

C'est un svn export qu'il faut faire, en toute simplicité.

En gros, tout ton bazar, il suffit de le remplacer par:

Code : Tout sélectionner

svn export file:///vers/le/depot /var/www
ou en passant directement par le serveur svn (plus propre)

Code : Tout sélectionner

svn export svn://vers/le/repertoire /var/www
Ce serait bien de tester un minimum quand même, fut-ce que pour voir que ça marche pas.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 1668 Messages

02 juin 2009, 18:46

Même si ça va faire un peu prétentieux :
J'ai fait un svn update pour éviter l'accumulation inutile
comme le faisait très justement remarqué mojorisin
causé par svn checkout si on l'utilise de manière répété.
Le très justement n'a peut-être rien à faire là mais bon :
La solution à éviter est un checkout sur l'environnement de production car les fichiers cachés .svn se retrouveront sur le serveur de production se qui pose un problème de sécurité et de place (les fichiers deviennent énormes au bout d'un moment).
Vu que personne ne l'a contredit j'ai pris ça pour argent comptant
Ma "bidouille" c'était pour tenter de cacher ces fameux fichiers
générés par subversion, personnellement, en utilisant chekout,
car c'est comme ça que je procède, malgré ce que vous pouvez
croire*, je n'ai qu'un dossier /trunk, vide qui plus est, comme
mon dépôt, j'ai donc aussi supposé pour les .svn, car c'est pas
la première fois que l'on m'en parle et je n'ai pas encore vu le
loup blanc.

* : jusqu'à ce poste update ne faisait pas partie de mes
méthodes et n'en fait toujours pas partie, je suis allé
chercher une alternative pour sa remarque

Pour revenir au problème, export présente quelques problèmes
il nécessite l'écrasement de /var/www, qui peut être résolu en
ajoutant --force devant, ça laisse /trunk visible, et part le
serveur il nécessite le nom d'utilisateur, qui est récupérable par
une variable et le mot de pass et là j'ai testé
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 3300 Messages

02 juin 2009, 22:31

ca marche très bien en scriptant un truc qui vire les .svn derrière (genre find . -type d | grep -r '.svn$' | xargs rm -rf)
Fait du php depuis que ca existe ou presque :)

Eléphant du PHP | 112 Messages

03 juin 2009, 00:32

pour revenir à la discussion initiale.

Dans mon contexte, vaut il mieux utiliser les hook avec un script ou un rsync utilisé avec une interface comme fredistrano ?

Si vous préférez les hooks, auriez vous un script à intégrer qui fonctionne ?
Si c'est plutot rsync, est ce que quelqu'un a déjà utilisé le projet fredistrano ou un autre (et dans ce cas merci de dire lequel) ?

je dois dire etre un peu perdu avec vos posts, car j'ai l impression qu'il y a plusieurs solutions mais sans savoir la plus pertinente à mon problème.
blog nouvelles technologies : http://www.jofischer.fr

Eléphant du PHP | 217 Messages

03 juin 2009, 07:45

Bonjour,
a priori fredistano a pas l'air mal, c'est le principe même du couplage svn avec rsync.
La date de dernière mise à jour n'est pas forcément un mal si aucun problème n'a été remonté auprès du développeur.
Je n'ai pas bien vu les options disponible pour la synchronisation, il serait interressant d'avoir une option permettant de spécifier si l'on souhaite supprimer ou non les fichiers ne faisant plus parti du projet mais je suppose que cette option doit être implémenter dans le logiciel (quid des données uploadées par l'utilsateur dans ce cas).

Dans l'ideal c'est d'avoir un serveur svn, un environement de développement et un environnement de production.
Cela permet d'avoir une copie de travail pour l'environnement de développement pour les update et un un rsync synchronisant la production et cette espace de développement (rsync permettant d'exclure les fichiers que l'on souhaite, .svn dans ce cas)

Attention toutefois dans cette solution si vous travaillez a plusieur sur le même projet, cela implique un espace de travail partagé ce qui est à l'opposé de la philosophie des controleur de version. De plus il faudra veiller à ce qu'une utilisation correcte de svn soit faite par tous les intervenant au risque de publier en production des fichiers en conflit (.mine,.rxxx) ce qui compromettra gravement la sécurité de vos applications

Eléphant du PHP | 112 Messages

03 juin 2009, 08:56

en fait je souhaiterais juste gérer mon env de développement. L'environnement de prod, sera mis à jour manuellement.

Donc mon process:
Les dev code en local et update le serveur de developpement via svn.
Si le svn est mis à jour, j'utilise fredistano pour mettre le projet /var/www/monprojet/ à jour.
Car comme j'ai posé la question, je pense que le projet situé dans le repository n'a pas la même structure que le projet dit "standard" en local. (merci de me confirmer ce point)

En tout cas je vous remercie tous pour votre contribution ...
blog nouvelles technologies : http://www.jofischer.fr