2010-01-18 56 views
10

我們已經成立了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> 

我想如果可能忽略這個特定的錯誤。

我需要做些什麼改變?

+0

當然,如果您忽略源代碼管理超時,那麼您不能可靠地構建最新版本,而您的「持續集成」構建毫無意義? – 2010-01-18 15:18:10

+0

@David M:嗯,這通常發生在SVN服務器停機維護時的SLA窗口期間。這不是一個特殊的情況,所以如果發生的時間少於幾個小時,我想忽略這個問題。 – 2010-01-18 15:34:29

+0

我們有一個互聯網託管svn服務器和片狀互聯網連接。每次連接斷開時,我們都會得到一個失敗的構建 - 這並沒有什麼用處。所以謝謝你的問題。 – 2011-10-27 08:58:00

回答

16

下面是我用它來防止這類影響生成的狀態錯誤的塊:

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

你需要把<project>標籤,而不是<sourcecontrol>下面這些權利。我不確定你能否忽略「超時」異常,但是 - 所有SVN異常都將被視爲相同。

UPDATE:你可以找到更多關於在CC.NET documentation這些設置,但是讓我複製有關的東西:前一排可能發生的源頭控制異常的最高金額,:

maxSourceControlRetries項目進入停止狀態(當stopProjectOnReachingMaxSourceControlRetries設置爲true時)。

stopProjectOnReachMaxSourceControlRetries:在達到maxSourceControlRetries或不是時停止項目。當設置爲true時,當連續源控制錯誤的數量等於maxSourceControlRetries時,項目將停止。

sourceControlErrorHandling:發生源控制錯誤時(GetModifications期間)要執行的操作。這是可能的值:

  • ReportEveryFailure:運行在發佈商部分,無論是否存在錯誤
  • ReportOnRetryAmount:只有運行時maxSourceControlRetries已經達到,發佈商部分將只運行一次發佈商部分。
  • ReportOnEveryRetryAmount:運行每當maxSourceControlRetries已達到發行部分。當達到maxSourceControlRetries並且發佈者部分已經運行時,計數器被設置爲0.
+0

雖然我沒有辦法測試它,但我會將它標記爲已接受。你能幫我一個忙,並解釋每一個條目嗎? – 2010-01-18 15:30:56

+0

我已經用一些CC.NET文檔更新了答案。我們只是說我和SVN超時有相同的問題(通常在夜間),而且由於它的原因,構建狀態經常被標記爲「Exception」。稍微玩了一下這些設置之後,我就決定了我在這裏發佈的那些設置,之後我沒有任何問題。你可能想自己玩這些遊戲(比如增加重試次數)。 – 2010-01-18 16:57:32

+0

我正在使用相同的配置 - 很遺憾,它不能解決問題。我的網絡管理員在隨機間隔內打破網絡的一個壞習慣,這標誌着我們所有的構建紅色,直到有人強制手動構建。 – skolima 2010-01-18 20:02:44

8

你不能只是增加'超時'值嗎?

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

這個問題一般在一夜之間發生,當服務器實際上停機時,或類似的東西。 – 2010-01-18 15:26:48

+4

謝謝。這有助於我遇到的問題。儘管我們必須使用 1,但您指出了我們的正確方向。 +1給你。 – David 2011-06-20 17:21:04

+0

@大衛你評論得到它爲我工作,謝謝! – Holger 2017-05-29 15:26:40

0

除了接受的答案。我發現它使用url觸發器幫助了我們很多。

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

因此,如果服務器無法訪問,CCNet將不會觸發構建。這有效地降低了失敗的機率。

Link to Documentation of URI Trigger

更新:我們從未有過由於svn服務器連接問題而導致的單一虛假故障,因爲上面的線路已經就位2個月。

相關問題