Can we tell CruiseControl.NET to ignore source control timeout errors?

眉间皱痕 提交于 2019-11-27 05:50:06

问题


We have CruiseControl.NET set up to do continuous integration of a number of our projects.

We are using a <cb:define> block to make sure all of our source control operations are done in the same way, and to keep the config DRY.

We are experiencing an issue every once in a while that cause the build to show "Exception". The message is as follows:

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)

The common config section is as follows:

<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>

I would like to ignore this specific error, if possible.

What changes do I need to make?


回答1:


Here's a block I use to prevent these kinds of errors affecting the build status:

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

You need to put these right below the <project> tag, not the <sourcecontrol>. I'm not sure you'll be able to ignore just the "timed out" exception, though - all SVN exceptions will be treated the same.

UPDATE: you can find out more about these settings in the CC.NET documentation, but let me copy the relevant stuff:

maxSourceControlRetries: The maximum amount of source control exceptions in a row that may occur, before the project goes to the stopped state(when stopProjectOnReachingMaxSourceControlRetries is set to true).

stopProjectOnReachingMaxSourceControlRetries: Stops the project on reaching maxSourceControlRetries or not. When set to true, the project will be stopped when the amount of consecutive source control errors is equal to maxSourceControlRetries.

sourceControlErrorHandling: What action to take when a source control error occurs (during GetModifications). These are the possible values :

  • ReportEveryFailure : runs the publisher section whenever there is an error
  • ReportOnRetryAmount : only runs the publisher section when maxSourceControlRetries has been reached, the publisher section will only be run once.
  • ReportOnEveryRetryAmount : runs the publisher section whenever the maxSourceControlRetries has been reached. When maxSourceControlRetries has been reached and the publisher section has ran, the counter is set back to 0.



回答2:


Can't you just increase the 'timeout' value ?

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



回答3:


In addition to the accepted answer. I found it helped us a lot by using url trigger.

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

So if the server is not reachable, CCNet won't event trigger a build. That effectively reduced the chance of failures.

Link to Documentation of URI Trigger.

Update: we never had a single false failure caused by svn server connectivity issue after above line was in place for near 2 months.



来源:https://stackoverflow.com/questions/2086957/can-we-tell-cruisecontrol-net-to-ignore-source-control-timeout-errors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!