2011-08-29 97 views
8

我想安装詹金斯轮询我的SVN回购,并开始一个新的构建,只要它检测到提交已经进入。我已经得到了投票部分工作,但这座建筑太过于热闹了,现在每次投票时都会重建 - 无论是否有任何变化。该SCM-polling.log文件读取:Jenkins投票SVN不断建立,即使没有新的提交

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 
从詹金斯

控制台输出看起来是这样的:

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 

回购URL设置为SVN://10.64.147.118:/ SVN /回购/ conttest/trunk,我告诉Jenkins删除未版本化的文件,然后在构建之前进行更新。工作空间绝对包含回购中的文件,并且每次构建都会成功。

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

+0

现在有同样的问题。Hudson及时轮询存储库,但每次修改都会修改。这怎么可能是默认设置? – Jonny

回答

3

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

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

1

我不确定是什么原因导致这种情况,但过去我有过很多关于SCM轮询的问题。我发现编写一个SVN post-commit触发器可以更好地工作,它触发构建的url来触发它。这消除了轮询的开销,并且如果没有更改,将永远不会触发构建。如果你想变得有趣,你甚至可以让触发器变得更聪明,避免编译readme.txt等文件。

+0

是的,我想到了这种方法,但我并不想实现它,因为我不想假设SVN仓库中的每个项目都在Jenkins中有相应的构建(是的,我可以修改post-commit只能在一些项目上工作,但是当我想让Jenkins管理的repo中创建一个新项目时,我必须再次更改它)。 但是,除非让投票正常工作,否则后提交是我能想到的唯一方法。 – lightstrike

+0

事实证明,我的问题的答案是在詹金斯的回购协议中使用http://协议。显然它不支持svn://协议。现在一切都适用于这种变化。 – lightstrike

1

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

可以使用后提交钩子作为Feasoron说,但有两个问题与方法:

  • 如果詹金斯/哈德森是下来的时候触发被击中,詹金斯/哈德森不会做建立。
  • 如果Jenkins/Hudson服务器(即使只是几秒钟)之间有任何时间差异,您最终可能会与Jenkins/Hudson构建版本库的旧版本版本。

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

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

如果您仍然无法弄清楚,请使用一些轮询日志更新您的问题,这可能会帮助我们理解您为什么会遇到这些问题。

+0

时间差异实际上取决于你的钩子 - 我们将修订号传递给Jenkins,并且它构建了该修订版。我认为如果你使用在SCM中构建的Jenkins来获取代码,这是比较棘手的,但这是可能的。 – Feasoron

+0

@David - 我找到了解决方案,显然svn://协议不被支持,因为在我更改了我的SVN服务器和Jenkins以使用http://之后,这些解决方案自动生效。谢谢您的帮助。 – lightstrike