我们设置了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>
如果可能的话,我想忽略这个特定的错误。
我需要做出哪些改变?
答案 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期间)。这些是可能的值:
答案 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服务器连接问题导致的单一虚假故障。