spa*_*nky 8 git curl hudson githooks git-post-receive
我的设置是一个Windows XAMPP服务器,启用了cURL,并安装了Git和Hudson.Hudson每分钟都会调查Git来查找更改,如果找到它们,它会创建一个构建版本.我使用这个版本作为我的测试服务器.这很好用.
我想在我的中央远程存储库上设置一个post-receive hook,它运行Hudson的force build功能.
我在我的中央Git存储库的hooks目录中创建了一个名为"post-receive"的post-receive文件,该文件是从开发人员的本地分支推送到的.他们每个都推送到中央存储库中的自己的分支.我想在每次推送后立即运行post-receive构建,而不是每分钟都有Hudson轮询Git.
当我打开一个shell到远程服务器并在hooks文件夹中运行"post-receive"时,它会运行.当人们从本地存储库副本推送到中央存储库副本时,它就不会被调用.
也许我不是在解释这个问题,但这就是我对Git的理解.
收到后代码是两行:
#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken
再一次,当我打开一个shell并运行它时,它可以工作,但是当有人推动它时,没有任何反应,直到一分钟或更短的时间过去,Hudson意识到Git已经改变,然后它就会构建.
我很乐意澄清是否需要.任何帮助是极大的赞赏.
编辑:玩了之后,我觉得也许后续接收没有执行,因为参考没有被更新的东西?git文档说
在更新所有引用后,它将在远程存储库上执行一次.
这是否意味着如果没有更新,它将不会执行?如果是这样,我很确定事情正在更新,所以它不应该适用.
这是我的过程:在本地进行编辑.提交编辑.从我的HEAD推送到名为'mybranch'的远程分支(不是主分支,已检出)这是我希望我的钩子执行的点.
小智 11
请检查您的文件是否具有可执行权限.否则无法执行.类似的东西rwxr-xr-x应该足够了.
您可以添加缺少的位
$ chmod +x /path/to/post-receive
您使用什么传输方法来推送回购?
挂钩仅在使用ssh和http的cgi实现等"智能"传输协议时执行.对于其他'哑'传输协议,如ftp,rsync和旧的http实现,挂钩永远不会被执行.我假设git协议会执行钩子,但推翻该协议从未被认为是一个好主意.
所有这些答案都很有用,但事实证明我需要 PATH 变量中的 git 的“bin”目录。我只有“cmd”目录。添加c:\my_path_to_git\git\bin到 PATH 并且工作正常。我通过反复试验并查看 apache 错误日志找到了这个答案。感谢大家的帮助!
| 归档时间: | 
 | 
| 查看次数: | 13590 次 | 
| 最近记录: |