我们可以告诉CruiseControl.NET忽略源控制超时错误吗?

时间:2010-01-18 15:16:00

标签: svn continuous-integration cruisecontrol.net

我们设置了CruiseControl.NET来持续集成我们的许多项目。

我们正在使用<cb:define>块来确保所有源代码控制操作都以相同的方式完成,并保持配置干燥。

我们每隔一段时间就遇到一个问题导致构建显示“异常”。信息如下:

ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out. 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo processInfo) 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Svn.GetModifications(IIntegrationResult from, IIntegrationResult to) 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl sourceControl, IIntegrationResult lastBuild, IIntegrationResult thisBuild) 
    at ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult from, IIntegrationResult to) 
    at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)

公共配置部分如下:

<sourcecontrol type="svn">
    <trunkUrl>http://ourserver/svn/$(project-svn-path)/trunk/</trunkUrl>
    <executable>C:\Program Files\CollabNet Subversion Server\csvn.exe</executable>
    <username>user</username>
    <password>password<password>
    <revert>true</revert>
</sourcecontrol>

如果可能的话,我想忽略这个特定的错误。

我需要做出哪些改变?

3 个答案:

答案 0 :(得分:16)

这是我用来阻止影响构建状态的这类错误的块:

<maxSourceControlRetries>5</maxSourceControlRetries>
<stopProjectOnReachingMaxSourceControlRetries>true</stopProjectOnReachingMaxSourceControlRetries>
<sourceControlErrorHandling>ReportOnRetryAmount</sourceControlErrorHandling>

您需要将这些放在<project>标记下方,而不是<sourcecontrol>。我不确定你是否能够忽略“超时”异常,但所有SVN异常都将被视为相同。

更新:您可以在CC.NET documentation中找到有关这些设置的更多信息,但请复制相关内容:

maxSourceControlRetries :在项目进入停止状态之前(当stopProjectOnReachingMaxSourceControlRetries设置为true时)可能发生的行中最大源控件异常量。

stopProjectOnReachingMaxSourceControlRetries :在达到maxSourceControlRetries时停止项目。设置为true时,当连续源控制错误的数量等于maxSourceControlRetries时,项目将停止。

sourceControlErrorHandling :发生源代码管理错误时采取的操作(在GetModifications期间)。这些是可能的值:

  • ReportEveryFailure:每当出现错误时运行发布商部分
  • ReportOnRetryAmount:仅在达到maxSourceControlRetries时运行发布者部分,发布者部分只运行一次。
  • ReportOnEveryRetryAmount:每当达到maxSourceControlRetries时运行发布者部分。当达到maxSourceControlRetries且发布者部分已运行时,计数器将重新设置为0.。

答案 1 :(得分:8)

你不能只增加'超时'值吗?

<sourcecontrol>
   ...
   <timeout>60000</timeout> <!-- timeout in milliseconds -->
   ...
</sourcecontrol>

答案 2 :(得分:0)

除了接受的答案。我发现它通过使用url触发器帮助了我们很多。

<triggers>
  <urlTrigger url="http://url.to.your.svn.server" />
</triggers>

因此,如果无法访问服务器,CCNet将不会触发构建事件。这有效地减少了失败的可能性。

Link to Documentation of URI Trigger

更新:在上线生产近2个月之后,我们从未遇到因svn服务器连接问题导致的单一虚假故障。