【发布时间】: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