2009-11-11 64 views
8

所以我试图让哈德森建立一个后收到钩。在我的本地git仓库我设置后receive.sample只是后接收命令chmod 755和该行补充说:混帐挂钩以及它们如何工作

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

如果我强迫构建,哈德森更新代码,但这里是我不不懂,在回购的钩子没有。样品后,他们就像他们在本地做的,在哈得逊回购后收到没有上面那行代码。这里发生了什么,以及钩子如何整合到整个git过程中?我是否需要更改远程回购的钩子?我本来认为这足以在本地完成,并推动任何从该回购中获取的人获得新的挂钩。我不明白另一个用户的回购会有不同的挂钩。

+0

我不wuite明白的问题。当您推送到远程存储库时,远程存储库'post-receive'挂钩在远程存储库**上被调用**。 – 2009-11-11 18:59:57

+0

亚,但我的观点是,它似乎并没有调用我的curl命令,如果我手动运行该命令,哈德森运行一个构建,当我做推,没有构建运行。 – brad 2009-11-11 19:28:47

回答

16

你基本上有两种选择:

  1. 放置post-receive服务器上,并让服务器运行卷曲。
  2. 放置一个post-commit钩上你的本地回购,让您的本地框运行卷曲。

作为构建工作可能会获取代码从服务器在回购打造,唯一的选择1.有意义。在情况2中,构建作业可能需要从本地框中获取代码,这可能不是你想要的。

您不能使用git push将挂钩放在服务器上。您(或其他具有相应权限)需要做的是通过手动登录到服务器修改钩子脚本文件本地。

11

钩不通过存储库共享。您需要在远程端安装该钩子。

+0

但添加挂钩到我的本地应该调用服务器上的命令不?否则钩的目的是什么? – brad 2009-11-11 19:29:20

+8

+1挂钩不受版本控制,不在存储库之间共享。主要是出于安全原因 - 让某人将代码推入回购库是一回事,让他们**在服务器上运行**代码是另一回事。而且,每个人都有相同的钩子 - 平台可能不同,路径可能不同,服务器可能有不同的目的(分段,CI,部署,QA等),这通常没有意义。 – 2009-11-11 19:40:09

+1

所以在我的本地回购中写入钩子实际上没有什么功能呢? – brad 2009-11-18 19:01:31