我们已经建立了CruiseControl.NET,以便对许多项目进行持续集成。
我们使用<cb:define>
块来确保所有源代码控制操作均以相同的方式完成,并保持config DRY。
我们有时会遇到一个问题,该问题会导致构建显示“ Exception”。消息如下:
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>
如果可能的话,我想忽略这个特定的错误。
我需要进行哪些更改?
最佳答案
这是我用来防止这些错误影响构建状态的代码块:
<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。