hudson 的 git 插件运行良好。但是,构建脚本必须更新存储库中文件的版本号、提交并推送回存储库。
当 Hudson 轮询 next 以检查更改时,它会进入无限循环,因为它将提交视为“更改”再次构建,提交更改,因此再次构建,然后提交另一个更改,等等。 . 你明白了。
我停止了它,在每个存储库中运行了一个“git log”,并使用 git ls-tree HEAD 比较了最新的提交 ID 是否完全相同
此外,Hudson 运行此命令来检查更改:
git fetch +refs/heads/:refs/remotes/origin/ git ls-tree 头
由于 Hudson 本身从其工作区存储库中推送了提交,并且显然 ls-tree 结果匹配,因此该命令如何确定已发生更改?
似乎它必须在进行构建之前存储 ls-tree 的结果,并与没有最新提交的结果进行比较。啊。我可以尝试关闭提交以测试该理论。
无论如何,除了修复 Hudson 的 git 插件中的任何问题,我还能做些什么来确保在我的构建结束时存储库是相同的并且 Hudson 会看到它。
如何解决这个问题?有什么想法吗?
韦恩
最佳答案
您的构建系统不应与您的版本控制系统有任何写入交互。它绝对不应该自动推送这些更改。
您的构建系统可能会询问 git(例如通过git describe
)当前的修订版是什么。其他任何内容都是多余且容易出错的。
您可能会考虑的另一件事是不轮询更改。这似乎是一种愚蠢的操作方式。 (不可否认,我是一个重度 buildbot 用户,非常习惯于在事件上触发所有内容。)
被轮询的 git 存储库知道它何时更改。它应该只是告诉 CI 系统基于此立即开始构建。您可以更快地完成构建,并且由于它们都被触发了,所以您的计算机不会无缘无故地做大量工作。
关于git - Hudson 无限循环轮询 Git 存储库中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1774610/