【问题标题】:Hudson infinite loop polling for changes in Git repository?Hudson无限循环轮询Git存储库中的更改?
【发布时间】:2009-11-21 05:33:13
【问题描述】:

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 插件中的任何问题,我可以做些什么来确保在构建结束时 repos 是相同的,并且 Hudson 会看到它。

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

韦恩

【问题讨论】:

  • 果然。当提交被注释掉时,脚本只推送到几个存储库,它可以正常工作。也就是说,Hudson 识别出零更改并等待更改而不循环。那么如何停止无限循环。 Hudson 的 git 插件似乎在初始获取构建后保存了 repo 状态。但它似乎应该在成功构建后再次保存 repo 状态,以防构建提交 - 或者至少将其作为一个选项。任何机构都有更简单、更快的想法来解决这个问题?
  • 哦,我在 github 上找到了 git-hudson-plugin 的一个分支,其他人似乎已经添加了对这种情况的处理。我正在下载和构建,并会尝试。再次,如果有人有更好的解决方案,请告知。如果解决了我会回帖。

标签: git hudson polling infinite-loop


【解决方案1】:

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

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

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

被轮询的 git repo 知道它何时发生变化。它应该只告诉 CI 系统基于此立即开始构建。您可以更快地获得构建,并且由于它们都被触发,您不会无缘无故地让您的计算机坐在那里做大量工作。

【讨论】:

  • 不幸的是,写入必须发生,因为构建必须使用 0.5.6.135 之类的版本号标记修订版,并且还使用该编号更新源文件,以便编译的二进制文件具有修订版。这允许将错误跟踪回正确的源代码。我们以前使用 SVN,该插件在轮询更改时可以选择“忽略”某些文件。所以我们让它忽略我们的版本文件。当然,Git 是不同的。如果您知道其他方法来完成同样的事情,请告诉我。
  • 我喜欢你实际上不轮询更改的想法。那里的障碍还在于避免自动构建推送的无限循环。所以这个方法也必须有方法之间进行比较。那很复杂。所以轮询和比较似乎更直接。并且每 1 分钟轮询一次更改绝对不是计算机需要担心的任何工作。
  • 仅供参考,我现在明白为什么你说构建不应该写入存储库。我已经完成了所有设置和工作,但是 CI 构建机器在构建结束时写入并创建非 fastword 提交,而编码人员在构建期间继续编码和提交。复杂但必要的要求。我将发布另一个问题来解决这个问题。
【解决方案2】:

答案是!...

Git Hudson 插件已经被某人分叉以添加此功能,它运行良好。尽管如此,我还是不得不关闭源代码并修复一些小问题。

现在它运行良好。构建提交,Git 插件在没有循环的情况下推回存储库,认为它再次发生了变化。

太棒了!

如果其他人需要此功能,请在 Github.com 上查找 Hudson-GIT-Plugin 的 tickzoom 分支,但请检查是否已重新集成到主项目中。提交者说他有兴趣并计划合并这些分叉。

韦恩

【讨论】:

  • 哦。这很酷!事实证明,Hudson Git 插件已经处理了这种情况。它在文档中进行了描述,几天前我就头晕目眩。这个想法是只承诺“功能”分支。然后构建服务器首先将功能分支合并到一个集成分支,然后它的工作。这样,自动化服务器就不需要进行非快进合并,并且提交以正确的顺序发生在集成分支中。惊人的。你必须爱上 Git 的力量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多