2009-11-11 3 views
8

Donc j'essaye d'obtenir hudson pour construire avec un crochet après réception. Dans mon git local, je mets post-receive.sample juste après réception, chmod 755 et ajouté dans la ligne:git hooks et comment ils fonctionnent

/usr/bin/curl -u user:secret http://localhost:8080/hudson/job/MyJob/build?token=secondsecret 

Si je force une construction, hudson met à jour le code, mais voici ce que je n » Je ne comprends pas, les hameçons dans ce repo ne pas avoir l'exemple après eux comme ils le font localement, et le post-recevoir dans le repo hudson n'a pas cette ligne de code ci-dessus. Que se passe-t-il ici et comment les hooks sont-ils intégrés dans le processus git? Dois-je changer ce crochet sur le repo distant? J'aurais pensé qu'il suffisait de le faire localement et de pousser afin que quiconque récupérant de ce repo obtienne les nouveaux hameçons. Je ne peux pas comprendre comment le repo d'un autre utilisateur aurait des crochets différents.

+0

Je ne comprends pas la question. Lorsque vous poussez vers un référentiel distant, le hook «post-receive» du référentiel distant est appelé ** sur le référentiel distant **. –

+0

ya mais mon point est que cela ne semble pas invoquer ma commande curl, si je l'exécute manuellement, hudson exécute une construction, quand je fais un push, aucune construction n'est exécutée. – brad

Répondre

16

Vous avez essentiellement deux options:

  1. Placez le crochet post-receive sur le serveur et laissez la boucle d'exécution du serveur.
  2. Placez un crochet post-commit sur votre dépôt local et laissez votre boîte locale tourner.

Comme votre travail de construction va probablement chercher le code pour construire à partir de la prise en pension sur le serveur , seule option 1. est logique. Dans le cas 2., le travail de construction devrait probablement récupérer le code de votre boîte locale, et ce n'est probablement pas ce que vous voulez. Vous ne pouvez pas placer de crochets sur le serveur en utilisant git push. Vous (ou quelqu'un avec les permissions appropriées) devez faire cela en vous connectant manuellement au serveur et en modifiant les fichiers de script de hook localement.

11

Les hameçons ne sont pas partagés via le référentiel. Vous devez installer le crochet du côté distant.

+0

mais en ajoutant le crochet à mon local devrait invoquer la commande sur le serveur non? Sinon, quel est le point de l'hameçon? – brad

+8

+1 Les hameçons ne sont pas contrôlés par version et ne sont pas partagés entre les référentiels. Principalement, c'est pour des raisons de sécurité - c'est une chose de laisser quelqu'un pousser le code dans votre repo, c'est une autre de les laisser ** exécuter ** du code sur votre serveur. En outre, il est souvent illogique que tout le monde ait les mêmes possibilités - les plates-formes peuvent être différentes, les chemins peuvent être différents, les serveurs peuvent avoir des objectifs différents (staging, CI, déploiement, assurance qualité, etc.). –

+1

donc l'écriture des crochets dans mon repo local ne fait rien alors? – brad

Questions connexes