我的设置是一个Windows XAMPP服务器,启用了cURL,并安装了Git和Hudson。 Hudson每分钟轮询Git以查找更改,如果发现更改,则创建一个构建。我将此构建用作我的测试服务器。这很好地工作。
我想在我的中央远程存储库上设置一个post-receive钩子,以运行Hudson的force build函数。
我在我的中央Git存储库的hooks目录中创建了一个名为“post-receive”的post-receive文件,该文件从开发人员的本地分支推送到其中。他们每个人都会将其推送到中央存储库上的自己的分支上。我希望在每次推送后立即运行post-receive构建,而不是让Hudson每分钟轮询Git。
当我打开一个shell到远程服务器并在hooks文件夹中运行“post-receive”时,它运行。只是当人们将其本地存储库副本推送到中央存储库时,它没有被调用。
也许我没有解释清楚,但这就是我理解Git的方式。 post-receive代码只有两行:
我想在我的中央远程存储库上设置一个post-receive钩子,以运行Hudson的force build函数。
我在我的中央Git存储库的hooks目录中创建了一个名为“post-receive”的post-receive文件,该文件从开发人员的本地分支推送到其中。他们每个人都会将其推送到中央存储库上的自己的分支上。我希望在每次推送后立即运行post-receive构建,而不是让Hudson每分钟轮询Git。
当我打开一个shell到远程服务器并在hooks文件夹中运行“post-receive”时,它运行。只是当人们将其本地存储库副本推送到中央存储库时,它没有被调用。
也许我没有解释清楚,但这就是我理解Git的方式。 post-receive代码只有两行:
#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken
再次说明,当我打开shell并运行它时,它可以工作,但当有人向它推送内容时,什么也不会发生,直到一分钟或更短的时间过去,Hudson才意识到Git已经更改,然后进行构建。
如果需要澄清,我很乐意提供帮助。非常感谢您的任何帮助。
编辑:在尝试了一下之后,我觉得可能是因为没有更新引用,所以post-receive没有执行?Git文档说:
它在所有引用都被更新后在远程存储库上执行。
这是否意味着如果没有更新,它就不会执行?如果是这样,我相信事情仍在更新,所以它不应该适用。
我的过程如下:
本地进行编辑。
提交编辑内容。
从我的HEAD推送到名为“mybranch”的远程分支(而不是检出的主分支)。
这是我想要执行钩子的时刻。