我的设置是 Windows XAMPP 服务器,启用了 cURL,并安装了 Git 和 Hudson。 Hudson 每分钟轮询 Git 以查找更改,如果找到更改,它会创建一个构建。我使用这个构建作为我的测试服务器。这很好用。
我想在运行 Hudson 的强制构建功能的中央远程存储库上设置一个接收后 Hook 。
我在中央 Git 存储库的 hooks 目录中创建了一个名为“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 文档说
It executes on the remote repository once after all the refs have been updated.
这是否意味着如果没有任何更新,它就不会执行?如果是这样,我很确定无论如何事情都会更新,所以它不应该适用。
这是我的过程: 在本地进行编辑。 提交编辑。 从我的 HEAD 推送到名为“mybranch”的远程分支(不是 master 分支,已 checkout ) 这是我希望 Hook 执行的时间点。
最佳答案
请检查您的文件是否具有可执行权限。否则无法执行。
像 rwxr-xr-x
这样的东西应该就足够了。
您可以添加缺少的位
$ chmod +x /path/to/post-receive
关于Git 接收后 Hook 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950800/