Jenkins即使没有新的提交,也会持续轮询SVN构建

8
我正在尝试设置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

仓库地址设置为svn://10.64.147.118:/svn/repos/conttest/trunk,我已经告诉Jenkins在构建之前删除未版本化的文件并更新。工作空间确实包含仓库中的文件,每次构建都成功。

有什么想法是什么原因导致这种情况?


现在遇到了同样的问题。Hudson定时轮询仓库,但即使没有更改,它每次都会构建。这怎么可能是默认设置? - Jonny
4个回答

3

我发现在Jenkins和SVN插件中似乎不支持svn://协议。将我的SVN服务器更改为使用http://并在Jenkins中设置新路径后,只有在实际进行了新提交时才会进行构建。

简而言之:不要使用svn://,请改用http://。


1

我不确定是什么原因导致了这个问题,但我过去遇到了很多SCM轮询的问题。我发现编写一个SVN提交后触发器并命中构建的URL以触发它可以更好地工作。这消除了轮询的开销,并且如果没有更改,将永远不会触发构建。如果你想变得更聪明,甚至可以使触发器避免在像readme.txt之类的文件更改时进行编译。


是的,我曾考虑过那种方法,但我并不想实现它,因为我不想假设SVN仓库中的每个项目都有相应的Jenkins构建(是的,我可以修改post-commit只在某些项目上工作,但这样一来,每当我想让Jenkins管理新项目时,我就必须再次更改它)。但是,除非我能正确地使轮询工作,否则我认为post-commit是我能想到的唯一其他方法。 - lightstrike
事实证明,解决我的问题的答案是在我的repo位置中使用http://协议。显然,它不支持svn://协议。现在通过这个更改一切都正常工作了。 - lightstrike

1

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

你可以像Feasoron所说那样使用提交后钩子(post commit hook),但这种方法有两个问题:

  • 如果Jenkins/Hudson在触发器触发时出现故障,Jenkins/Hudson将不会进行构建。
  • 如果Jenkins/Hudson服务器之间存在任何时间差异(即使只有几秒钟),您可能会得到Jenkins/Hudson构建的版本的库。

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

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

如果你还是无法理解,更新一下你的问题并附上一些投票日志,这可能会帮助我们了解你为什么会遇到这些问题。


时间差异实际上取决于您的钩子 - 我们将修订号传递给 Jenkins,然后它构建该修订版。如果您正在使用 Jenkins 内置的 SCM 获取代码,则可能会更加棘手,但仍然是可行的。 - Feasoron
@David - 我找到了解决方案,显然不支持svn://协议,因为当我将我的SVN服务器和Jenkins更改为使用http://时,问题得到了解决。感谢您的帮助。 - lightstrike

0

这可能是与SVN插件有关的问题。请参见此处问题10222


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接