【问题标题】:Jenkins Poll SVN builds constantly even with no new commits即使没有新的提交,Jenkins Poll SVN 也会不断构建
【发布时间】:2011-11-06 07:08:56
【问题描述】:

我正在尝试将 Jenkins 设置为从我的 SVN 存储库中进行轮询,并在检测到提交进入时开始新构建。我已经让轮询部分正常工作,但是构建相当热心,现在它在每次轮询时都在重建——无论是否有任何变化。 SCM-polling.log 文件内容如下:

Started on Aug 31, 2011 9:49:51 AM
Workspace doesn't contain svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk. Need a new build.
Done. Took 10 ms
Changes found

Jenkins 的控制台输出如下所示:

Started by an SCM change
Checking out a fresh workspace because the workspace is not svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk
Cleaning workspace /var/lib/jenkins/jobs/CSATester/workspace
Checking out svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk
....
no revision recorded for svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk in the previous build
No changesets found for this build

repo url 设置为 svn://10.64.147.118:/svn/repos/conttest/trunk 我已经告诉 Jenkins 删除未版本控制的文件,然后在构建之前更新。工作空间肯定包含 repo 中的文件,并且每次都构建成功。

关于可能导致此问题的任何想法?

【问题讨论】:

  • 现在有同样的问题。 Hudson 会及时轮询存储库,但它每次都会构建,尽管没有任何更改。这怎么可能是默认设置?

标签: svn hudson jenkins hudson-plugins


【解决方案1】:

所以,我发现 Jenkins 或 SVN 插件似乎都不支持 svn:// 协议。在将我的 SVN 服务器更改为使用 http:// 并在 Jenkins 中设置新路径后,除非实际上有新的提交,否则构建将不再发生。

TL,DR:不要使用 svn://,而是使用 http://。

【讨论】:

    【解决方案2】:

    我不确定是什么原因造成的,但过去我在 SCM 轮询方面遇到过很多问题。我发现编写一个 SVN 提交后触发器会更好地访问构建的 url 来触发它。这消除了轮询的开销,并且在没有更改的情况下永远不会触发构建。如果您想变得花哨,甚至可以使触发器“更智能”,并避免编译 readme.txt 等文件的更改。

    【讨论】:

    • 是的,我想过这种方法,但我并不想实现它,因为我不想假设 SVN 存储库中的每个项目都有相应的构建詹金斯(是的,我可以将提交后修改为仅适用于某些项目,但是每当在我希望詹金斯管理的存储库中创建一个新项目时,我都必须再次更改它)。但是,除非我让投票正常工作,否则提交后是我能想到的唯一其他方式。
    • 事实证明,我的问题的答案是在我的 repo 位置使用 Jenkins 中的 http:// 协议。显然它不支持 svn:// 协议。现在一切都随着这个变化而工作。
    【解决方案3】:

    我们在 CVS 中遇到了类似的问题,即 CVS 轮询所用的时间比我告诉它轮询更改的时间要长。也就是说,CVS 轮询更改需要三分钟,但我告诉它每分钟轮询一次。不过,这不应该是 Subversion 的问题。

    您可以像Feasoron 所说的那样使用提交提交挂钩,但是这种方法有两个问题:

    • 如果按下触发器时 Jenkins/Hudson 已关闭,Jenkins/Hudson 将不会进行构建。
    • 如果 Jenkins/Hudson 服务器之间存在任何时间差异(即使只有几秒钟),您最终可能会导致 Jenkins/Hudson 构建版本的存储库。

    大多数人在 Jenkins/Hudson 中有 Subversion 轮询并且没有这些问题,因此它可能与您的设置中的某些内容有关。

    查看每个构建的轮询日志,看看为什么 Jenkins/Hudson 认为它看到了更新(在每个构建中作为网页左侧的链接提供)。还要查看构建控制台的前几行,看看是否提供了任何线索。

    如果您仍然无法弄清楚,请使用一些投票日志更新您的问题,这可能有助于我们了解您遇到这些问题的原因。

    【讨论】:

    • 时差真的取决于你的钩子——我们将修订号传递给 Jenkins,它会构建该修订。如果您使用 SCM 中内置的 Jenkins 来获取代码,我认为这会比较棘手,但这是可能的。
    • @David - 我找到了解决方案,显然不支持 svn:// 协议,因为在我更改了我的 SVN 服务器和 Jenkins 以使用 http:// 之后,事情自己解决了.感谢您的帮助。
    【解决方案4】:

    这可能是 SVN 插件的问题。见这里Issue 10222

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2016-12-10
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多