Hudson无限循环轮询Git存储库中的更改?

时间:2009-11-21 05:33:14

标签: git hudson polling infinite-loop

哈德森的git插件效果很好。但是,构建脚本必须更新存储库中的文件中的版本号,提交并推送回存储库。

当Hudson轮询旁边检查更改时,它进入无限循环,因为它看到提交为“更改”再次构建,提交更改,因此它再次构建,然后它提交另一个更改,等等。你明白了。

我停止了它,在每个存储库中运行了一个“git log”并使用git ls-tree HEAD比较最新的提交ID是完全相同的

此外,Hudson运行此命令以检查更改:

git fetch + refs / heads / :refs / remotes / origin / git ls-tree HEAD

由于Hudson本身从其工作空间存储库中推送了提交,并且显然ls-tree结果匹配,该命令如何确定存在更改?

似乎必须在进行构建之前存储ls-tree的结果,并与不具有最新提交的结果进行比较。啊。我可以尝试关闭提交来测试该理论。

无论如何,不​​是在Hudson的git插件中修复任何问题,我可以做些什么来确保在我的构建结束时repos是相同的而且Hudson会看到它。

如何解决这个问题?有什么想法吗?

韦恩

2 个答案:

答案 0 :(得分:5)

您的构建系统不应与您的版本控制系统进行任何写入交互。它当然不应该自动推送这些更改。

您的构建系统可能询问 git(例如,通过git describe)当前版本是什么。其他任何事情都是多余的,容易出错。

您可以考虑的另一件事是不轮询更改。这似乎是一种愚蠢的操作方式。 (不可否认,我是一个沉重的buildbot用户,非常习惯于在事件中触发所有内容。)

正在接受调查的git repo知道它何时发生变化。它应该告诉CI系统立即启动构建。你可以更快地获得你的构建,并且因为它们都被触发了,你没有计算机坐在那里做大量的工作。

答案 1 :(得分:3)

答案是!...

Git Hudson插件已被某人分叉以添加此功能,但效果很好。不过,我不得不取消资源并修复一些小问题。

现在效果很好。构建提交,Git插件推送回存储库而没有循环,认为它已经再次发生变化。

奇妙!

如果其他人需要这个,请查看Github.com上的Hudson-GIT-Plugin的tickzoom分支,但检查是否已经集成回主项目。提交人说他很感兴趣并计划合并叉子。

韦恩