我的设置是一个 Windows XAMPP 服务器,启用了 cURL,并安装了 Git 和 Hudson。Hudson 每分钟轮询一次 Git 以查找更改,如果找到更改,它会创建一个构建。我使用这个构建作为我的测试服务器。这工作正常。
我想在我的中央远程存储库上设置一个接收后挂钩,该存储库运行 Hudson 的强制构建功能。
我在我的中央 Git 存储库的 hooks 目录中创建了一个名为“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 被改变了,然后它构建了。
如果需要,我很乐意澄清。任何帮助是极大的赞赏。
编辑:玩弄它之后,我觉得也许 post-receive 没有执行,因为 refs 没有被更新?git文档说
在所有 refs 都更新后,它会在远程存储库上执行一次。
这是否意味着如果没有更新,它将不会执行?如果是这样,我很确定无论如何事情都会更新,所以它不应该适用。
这是我的过程:在本地进行编辑。提交编辑。从我的 HEAD 推送到名为“mybranch”的远程分支(不是已签出的主分支)这是我希望我的钩子执行的点。