2010-12-07 103 views
7

我在CruiseControl.NET中運行幾個項目。他們中的許多人沒有構建錯誤並且構建成功。他們都試圖在構建之前提取最新的代碼。CruiseControl.NET零星的SVN 500錯誤

我注意到他們經常失敗的建設; CruiseControl報告「例外」。例外是SVN 500錯誤(內部服務器錯誤)。它會隨機但持續地發生(例如,在一個項目中,每個交替構建失敗)。

我試着用相同的證書檢查出這些零星失敗的項目,它的工作原理。我知道項目構建,因爲不是每個構建都失敗。

問題是什麼?

對於它的價值,這裏是一個典型的例外的頂線(不SVN項目URL或憑證):

ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation failed: svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'https://some/url/trunk' 
. Process command: C:\Program Files\CollabNet Subversion Client\svn.exe log https://some/url/trunk -r "{2010-12-04T09:09:19Z}:{2010-12-07T09:08:48Z}" --verbose --xml --username ******** --password ******** --non-interactive --no-auth-cache 

編輯:有時,這似乎是因爲有一個在本地的SVN衝突夾。但這並不一致。


賞金:我添加了一個賞金的通用解決方案,以這樣的:如何CC.NET被配置爲優雅地SVN錯誤處理,即不把通過定期更新檢查觸發SVN失敗(而不是預定的每日構建)作爲構建失敗,而是優雅地恢復,直到它被修復或直到連接恢復。

雖然我不是CC.NET的專家,但也沒有長時間尋找,我還沒有設法自己弄清楚。對此有支持或需要編碼嗎?謝謝!

爲了澄清,

  • 我們有一個CC.NET服務器設置檢查新的提交和購買+建設+測試所有更改,然後報告結果。
  • 但是,如果SVN服務器出現故障或者我們失去了連接,那麼它會認爲這是最後一次提交破壞了構建:它將構建狀態設置爲紅色並將最後一個提交者的電子郵件視爲它們的錯誤。
  • 是的,這對於一天一次的構建工作來說是一個問題,但對於持續的每次提交整合,我不認爲這是有用的行爲。
+0

無論原因如何,我也會對配置CC.NET忽略SVN異常而不是失敗構建的方式感興趣。 – Rup 2010-12-08 21:15:59

+0

您的CI設置不應該產生乾淨的結帳會產生什麼?如果是這樣,那麼如果發生異常,您的整個構建環境將是無效的。 – Mark 2010-12-10 15:55:39

回答

1

解決此問題的一個難辦法是檢查批處理文件或自定義包裝器(而不是CruiseControl.NET的源代碼管理工具)調用svn客戶端並創建文件(或如果構建是必需的,則可以使用其他一些信令改變方式)。批處理或包裝可以根據需要處理異常。當然,這個解決方案可能需要改變構建過程的其餘部分。