Можем ли мы сказать 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 месяцев.