Можем ли мы сказать CruiseControl.NET игнорировать ошибки тайм-аута контроля источника?

У нас есть CruiseControl.NET, созданный для непрерывной интеграции ряда наших проектов.

Мы используем блок <cb:define>, чтобы убедиться, что все наши операции с исходным кодом выполняются таким же образом и сохраняем конфигурацию DRY.

Мы периодически сталкиваемся с проблемой, которая заставляет сборку показывать "Исключение". Сообщение выглядит следующим образом:

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>

Я хотел бы проигнорировать эту конкретную ошибку, если это возможно.

Какие изменения мне нужно сделать?

Ответ 1

Здесь блок, который я использую для предотвращения таких ошибок, влияющих на статус сборки:

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

Вам нужно поместить это прямо ниже тега <project>, а не <sourcecontrol>. Я не уверен, что вы сможете игнорировать только исключение "timed out", хотя все исключения SVN будут обрабатываться одинаково.

UPDATE: вы можете узнать больше об этих настройках в документации CC.NET, но позвольте мне скопировать соответствующие материалы:

maxSourceControlRetries. Максимальное количество исключений управления источником в строке, которая может произойти, до того, как проект перейдет в состояние остановки (когда stopProjectOnReachingMaxSourceControlRetries установлено в true).

stopProjectOnReachingMaxSourceControlRetries: останавливает проект при достижении maxSourceControlRetries или нет. Если установлено значение true, проект будет остановлен, когда количество последовательных ошибок управления источником будет равно maxSourceControlRetries.

sourceControlErrorHandling: какое действие следует предпринять, когда возникает ошибка управления источником (во время GetModifications). Это возможные значения:

  • ReportEveryFailure: запускает раздел издателя при возникновении ошибки
  • ReportOnRetryAmount: запускает только раздел издателя при достижении maxSourceControlRetries, раздел издателя будет запускаться только один раз.
  • ReportOnEveryRetryAmount: запускает раздел издателя всякий раз, когда достигается maxSourceControlRetries. Когда maxSourceControlRetries будет достигнуто, и раздел издателя будет запущен, счетчик будет установлен на 0.

Ответ 2

Не можете ли вы увеличить значение "тайм-аута"?

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

Ответ 3

В дополнение к принятому ответу. Я нашел, что это очень помогло нам, используя триггер URL.

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

Поэтому, если сервер недоступен, CCNet не будет инициировать создание события. Это эффективно уменьшило вероятность сбоев.

Ссылка на документацию триггера URI.

Обновление: у нас никогда не было ни одного ложного сбоя, вызванного проблемой подключения сервера svn после того, как надстрочная линия была на месте в течение ближайших 2 месяцев.