2010-08-01 15 views
5

Mon poste de travail utilise Hudson pour ses builds quotidiens, avec plusieurs build esclaves (un Linux, un Windows, un Mac) vérifiant notre base de code complète de svn et construisant notre application à minuit chaque jour. Tout cela fonctionne assez bien.Comment puis-je m'assurer que tous mes esclaves build hudson vérifient la même révision svn pour la construction quotidienne?

Il y a un problème occasionnel qui se produit cependant ... parfois un développeur travaillera en retard, et verra un changement à svn juste après minuit. Lorsque cela se produit, il est possible que certains des esclaves de construction quotidiens fassent leur 'svn checkout' avant que le commit svn ne soit traité, tandis que les autres esclaves de build le feront après le traitement de la validation. Lorsque cela se produit, nous finissons avec différentes révisions construites sur différentes plates-formes ... par exemple. la version Mac pourrait être une version de la révision 5555 de SVN, tandis que la version Windows finirait par être une version 555 de la révision SVN. C'est dommage, car nous voulons que toutes les versions quotidiennes d'une journée soient basées sur la même base de code.

Je suppose qu'un moyen d'éviter cela est d'interdire aux développeurs de s'engager à svn entre 23h30 et 12h30, mais je préfère une solution plus élégante qui ne repose pas sur le comportement des développeurs. Est-ce qu'il y a un? En particulier, s'il y a un moyen de dire à hudson de vérifier la révision du code qui était en cours à minuit du jour courant (par exemple "svn co -r {" the-current-date "}") au lieu de vérifier HEAD, je pense que cela pourrait faire l'affaire.

Existe-t-il un moyen commun/facile de gérer ce problème?

+0

Commencer la construction à 1h du matin? :) –

+0

lol, c'était un bon. J'espère qu'ils n'ont pas de problème, de sorte que les développeurs sont là jusqu'à 13h ou même plus tard. ;) –

Répondre

3

La solution dépend un peu de la façon dont vous démarrez les builds. Si elles sont toutes minuteries démarrées, vous pouvez les laisser tous démarrer en même temps. Le risque que vous finissiez avec différentes révisions sera minime. Une version plus élégante consiste à avoir un travail qui déclenche tous vos travaux de build en passant la révision en paramètre. Si la construction n'est pas trop longue, vous pouvez créer un travail qui passera la révision à tous les autres travaux.

EDIT: Actuellement, le suivant est pas pris en charge par Hudson (1,376)

J'ai aussi trouvé une belle svn book. Il indique que vous pouvez remplacer la révision par une date entre accolades. Vous pouvez donc essayer <svn-url>@{00:00} dans la configuration de votre travail.

+0

L'astuce @ {00:00} est soignée; Malheureusement, cela ne fonctionne pas via le client svn java intégré dans hudson. Une autre considération est si votre référentiel utilise svn: externals alors je crois que les externes peuvent être récupérés avec la mauvaise révision aussi bien. – jdkoftinoff

+0

Je viens de le remarquer aussi. :( –

0

Une autre idée que j'ai trouvé utile est de partager le même répertoire source parmi les esclaves et d'avoir une commande svn up , ce qui réduit le temps de svn update, et vous libère aussi de la synchronisation . J'utilise nfs sur les machines Linux, aussi sshfs fonctionnera.