2010-12-10 75 views
4

Comment configurer le système pour avoir un maître et plusieurs esclaves où construire le code-c normal avec gmake? Comment les esclaves peuvent accéder à l'espace de travail du maître? Je suppose que le partage NFS est bien parti, mais si ce n'est pas possible autres options?Hudson esclaves, comment accéder à l'espace de travail

http://wiki.hudson-ci.org/display/HUDSON/Distributed+builds est là mais ne peut pas comprendre comment le partage de l'espace de travail est géré?

Rsync? Du maître: travail SCM -> fait -> rsync à tous les esclaves -> travail de construction et si a été fait sur l'esclave -> espace de travail de rsync de nouveau au maître?

Des preuves de concept ou des solutions réelles?

Répondre

1

Juste une façon de faire les choses, d'autres existent.

Les espaces de travail ne sont en réalité pas partagés lorsqu'ils sont distribués à plusieurs machines, car elles existent en tant que répertoires dans chacune des machines multiples. Pour résoudre la coordination des éléments, tout élément qui doit être distribué d'un espace de travail à un autre est copié dans un référentiel central via SCP.

Cela signifie que j'ai parfois une tâche qui doit attendre sur les éléments qui atterrissent dans le référentiel central. Pour résoudre ce problème, j'ai la tâche exécuter un script shell qui interroge le référentiel via SCP pour la présence des éléments nécessaires, et il erreur si les éléments ne sont pas disponibles après cinq minutes. Le seul inconvénient de ceci est que vous devez passer un paramètre (numéro de build) pour garder les builds sur la même page, empêchant une build de récupérer une artefact construite de version précédente. Cela et vous devez configurer beaucoup de clés SSH pour éviter la nécessité de passer un mot de passe lors de l'exécution des scripts SSH. Comme je l'ai dit, ce n'est pas la solution idéale, mais je trouve qu'elle est plus stable que le code de saisie d'artefact ssh pour ma version particulière de Hudson (et mon ensemble de serveurs SSH). Un inconvénient, les serveurs SSH dans la plupart des machines Linux semblent vraiment manquer de performance. Une solution comme la mienne a tendance à submerger votre serveur SSH avec beaucoup de connexions arrivant à peu près au même moment. Si vous trouvez la même chose avec vous, vous pouvez ajouter des délais de temporisation (solution facile, imparfaite) ou vous pouvez reconstruire le serveur SSH avec des correctifs haute performance. Un jour, j'espère que les correctifs haute performance se retrouveront dans le code de base du serveur SSH, à condition qu'ils n'aient pas d'impact négatif sur la sécurité du serveur SSH.

4

Lorsque Hudson exécute une génération sur un noeud esclave, il effectue une extraction à partir du contrôle de source sur ce noeud. Si vous souhaitez copier d'autres fichiers à partir du nœud maître ou copier d'autres éléments sur le nœud maître après une génération, vous pouvez utiliser le Copy to Slave plugin.

+2

J'ai eu une preuve de groupe concept avec 5 esclaves qui font tout cela. Le plugin perforce créerait de nouveaux espaces de travail pour chaque esclave et effectuerait une synchronisation initiale (qui a pris une éternité). Après cela, chaque machine synchroniserait uniquement les modifications depuis la dernière génération pour remettre l'espace de travail en ligne. Mon seul problème était que de temps en temps les espaces de travail devenaient invisibles et je devais forcer une synchronisation complète sur eux. Je me suis débrouillé plutôt bien et je n'avais rien à construire pour copier des fichiers. – dhable

+0

Intéressant @Dan.Je me connecte à SVN et Team Server, et j'ai tous les deux mis en place pour faire un checkout complet à chaque fois. Cela prend quelques minutes supplémentaires, mais cela n'a pas encore été un problème car notre base de code est relativement petite. – dsolimano