2011-02-09 72 views
8

我的设置是一个Windows XAMPP服务器,启用了cURL,并安装了Git和Hudson。 Hudson每分钟轮询Git以寻找变化,如果发现它们,它会创建一个构建。我使用这个版本作为我的测试服务器。这工作正常。Git后接收钩不工作

我想设置一台运行哈德森的力构建功能在我中心远程仓库后收到钩。

我已经创建了一个叫做在钩子目录在我中心Git仓库“后收到”后,收到文件,也就是从开发者的本地分支推到了一个。他们每个人都推送到中央存储库上的自己的分支。我希望在每次推送后立即运行post-receive构建,而不是让Hudson每分钟轮询一次Git。

当我打开一个shell到远程服务器,并运行在钩子文件夹“后接受”,它运行。当人们将其从本地存储库副本推送到中央存储库副本时,它不会被调用。

也许我没有解释这个权利,但这是我理解Git的方式。

的,收到后置代号为两行:

#!/bin/sh 
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken 

同样,当我打开一个外壳并运行此,它的工作原理,但是当有人推它,什么都不会发生,直到一分钟就少了哈德森意识到Git已经改变了,然后它就建立起来了。

我很高兴澄清是否需要。任何帮助是极大的赞赏。

编辑:玩弄之后,我觉得也许后收到没有执行,因为裁判没有被更新的东西吗? git文档说

它在所有ref已更新后在远程存储库上执行一次。

这是否意味着,如果没有更新,它不会执行?如果是这样,我很确定事情正在更新,所以它不应该适用。

这里是我的过程: 制作本地编辑。 提交修改。 从我的HEAD推送到名为'mybranch'的远程分支(不是主分支,这是检出) 这是我希望我的钩子执行的点。

+0

Git进程正在运行时,用户有权执行该脚本? – jweyrich 2011-02-09 21:51:11

+0

不确定。它在我通过Git Bash运行时执行它,但当我推送它时它不执行它。我将如何检查这些权限? – spanky 2011-02-09 21:52:55

+0

正确的权限取决于您共享存储库的方式以及实际配置。但是,msquared的告诉你为所有用户/组提供可执行权限的方式,所以如果问题确实如此,它应该可以工作。 – jweyrich 2011-02-09 21:58:12

回答

3

所有这些答案都很有用,但事实证明我需要我的PATH变量中的“bin”目录。我只有“cmd”目录。 PATH中增加了c:\my_path_to_git\git\bin,它工作正常。我通过反复试验找到了这个答案,并查看了apache错误日志。感谢大家的帮助!

11

请检查您的文件是否具有可执行权限。否则它不能执行。 像rwxr-xr-x应该就足够了。

您可以

$ chmod +x /path/to/post-receive 
1

尝试使用完整路径卷曲后收到文件添加缺少的一点,因为路径可以是手工运行脚本时不同。

如果你想看到的是正在运行的环境后收到脚本:

#!/bin/sh 
export > file 

或只是(它会显示ENV。推入回购后)

#!/bin/sh 
export 

还有变数,我不知道如何执行shell scrips在Windows上运行,因此#!/路径/到/安装/ SH代替#!/ bin/sh的可能帮助

5

您使用什么传输方法推送回购?

挂钩仅在使用'smart'传输协议(如ssh和http的cgi实现)时执行。对于ftp,rsync和较早的http实现等其他“哑”传输协议,挂钩永远不会执行。我假设git协议会执行钩子,但是推动这个协议从未被认为是一个好主意。

1

我认为答案很简单,你需要移动的内容后收到钩服务器端,而不是客户端