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

标签 git hudson polling infinite-loop

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/

相关文章:

git - 如何获得与 git 一起工作的 Maven 版本?

git - 为什么 ssh-agent 需要 root 权限?

vb6 - 如何在 Hudson 中运行 VB6 项目?

javascript - AngularJS 轮询器抛出

git - 'git request-pull' 和 'pull request' 之间的区别

git - 为什么 git 会修改我的文件?我该如何撤消它?

hudson - 如何在 Jenkins 中保留变量值

ldap - 如何配置 Jenkins/Hudson 在 Snow Leopard 服务器上使用 LDAP

javascript - 使用 XMLHTTPRequest 从 JavaScript 工作线程进行轮询

c++ - 如何等待 n 秒才能打开命名管道?