2009-11-11 15 views
8

Quindi sto cercando di ottenere hudson per costruire con un gancio di post-ricezione. Nel mio repo git locale ho impostato post-receive.sample ad appena post-ricezione, chmod 755 e aggiunto nella linea:git git e come funzionano

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

Se forzo una build, Hudson aggiorna il codice, ma qui è quello che don' t capisco, gli hook in quel repository NON hanno il .sample dopo di loro come fanno localmente, e il post-receive nel repository hudson non ha quella riga di codice sopra. Cosa sta succedendo qui e in che modo gli hook sono integrati nell'intero processo Git? Devo cambiare questo hook sul repository remoto? Avrei pensato che fosse sufficiente farlo localmente e spingere in modo che chiunque recuperasse da quel repository ottenga i nuovi ganci. Non riesco a capire come il repository di un altro utente avrebbe ganci diversi.

+0

Non capisco la domanda. Quando si preme sul repository remoto, l'hook 'post-receive' dell'archivio remoto viene richiamato ** sul repository remoto **. –

+0

ya ma il mio punto è che non sembra che stia invocando il mio comando di arricciatura, se lo eseguo manualmente, hudson esegue una build, quando faccio una push, non viene eseguita alcuna build. – brad

risposta

16

Che, fondamentalmente, sono due opzioni:

  1. Posizionare il gancio post-receive sul servere lasciare che il ricciolo esecuzione del server.
  2. Posizionare un gancio post-commit sul repository locale e lasciare che la casella locale si arricci.

come il vostro lavoro di compilazione sarà probabilmente prendere il codice per costruire da repo sul server, unica opzione 1. ha un senso. Nel caso 2., il lavoro di compilazione dovrebbe probabilmente recuperare il codice dalla tua casella locale, e probabilmente non è quello che vuoi.

Non è possibile posizionare ganci sul server utilizzando git push. L'utente (o qualcuno con le autorizzazioni appropriate) deve farlo collegandosi manualmente al server e modificando localmente i file dello script di hook.

11

Gli hook non vengono condivisi tramite il repository. È necessario installare il gancio sul lato remoto.

+0

ma aggiungendo l'hook a quello locale dovrebbe richiamare il comando sul server no? altrimenti qual è il punto del gancio? – brad

+8

+1 Gli hook non sono controllati dalla versione e non sono condivisi tra i repository. Principalmente questo è per motivi di sicurezza - è una cosa lasciare che qualcuno spinga il codice nel repository, è un altro che consente di eseguire ** codice ** sul proprio server. Inoltre, spesso non ha senso che tutti abbiano gli stessi hook - le piattaforme possono essere diverse, i percorsi possono essere diversi, i server possono avere scopi diversi (staging, CI, deployment, QA, ecc.). –

+1

quindi scrivere ganci nel mio repository locale non fa nulla efficace in quel momento? – brad