我們有一個相當複雜的Visual Studio解決方案(57個項目,其中19個是網站,幾乎每次通過推送代碼觸發時都無法構建,但隨後我們手動觸發構建並這個解決方案包含57個項目,其中19個是網站項目(不是web應用程序項目,沒有.csproj文件)其餘的是類庫和後臺作業。19網站項目在IIS虛擬目錄中構成一個大型多功能內容管理系統。Visual Studio網站構建在CI服務器上間歇性地失敗
構建服務器是Hudson v1.395。用於構建的命令是:
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" "SolutionName.sln" /rebuild Debug
當構建失敗,它總是等完全相同的網站項目,具有完全相同的消息:
------ Rebuild All started: Project: C:\...\WebsiteName\, Configuration: Debug Any CPU ------
Validating Web Site
: Build (web): The application domain in which the thread was running has been unloaded.
Validation Complete
一個Google Search for this message目前比少很有幫助。 This link最接近實際問題,但沒有解決方案。很顯然,在構建過程中我們不會更改任何解決方案文件,因爲它在構建服務器上發生。
當它失敗時,我們手動觸發構建,並且我們得到像我們預期的(對不起,刪節):
------ Rebuild All started: Project: C:\...\News2\, Configuration: Debug Any CPU ------
Validating Web Site
Building directory '/WebsiteName/Dir1/Dir2/'.
Building directory '/WebsiteName/'.
Building directory '/WebsiteName/Dir3/'.
// 22 more but you get the point
// A few warnings caused by our own use of the ObsoleteAttribute, nothing to be concerned about
Validation Complete
這是什麼原因卸載消息此應用程序域?
其他一些注意事項:
- 我們認爲這可能是哈德森運行內存,因爲我們觀察到的java泄露它頗有幾分。所以,我們增加了一項任務,每天早上6點重新啓動Hudson服務。即使在構建過程中有足夠的可用內存,它仍然會失敗。
- 推送到同一個存儲庫還會導致構建更簡單(只有22個項目,無網站項目)解決方案。那個總是成功的。另外,手動觸發它們同時運行也會成功。
- 我知道我們應該升級哈德森,但這永遠是那些我們從來沒有時間看到的後退項目之一。無論如何,我相當強烈地感到這是一個Visual Studio/MSBuild問題,而不是哈德森問題。
編輯1:MSBuild的
與MSBuild的問題是,有這麼多來自在Visual Studio中生成不同的小怪癖。在開發人員機器上的Visual Studio中編譯解決方案,然後在構建服務器上失敗,這是非常令人沮喪的。即使msbuild的輸出與我們的開發人員在其構建輸出窗口中看到的內容截然不同(更加冗長的一件事情)。是否有額外的命令行標誌使MSBuild輸出更符合您在Visual Studio生成窗口中獲得的內容?
還有其他的東西也很尷尬。如果碰巧有一個與項目命名相同的解決方案文件夾,MSBuild會拋出一個錯誤,但Visual Studio處理它就好了。這些都是真正讓你脫穎而出的怪癖。
關於MSBuild,請參閱我附加到我的問題的「編輯1」。雖然不是我最喜歡的選項,但我會嘗試。我也會嘗試/ RunExit,儘管我們沒有觀察到在服務器上存在的devenv實例。還澄清 - 即使他們是從*同*庫,這兩種解決方案是完全克隆,所以沒有分享任何類型的兩個併發devenv的實例之間回事。 –
的問候上的MSBuild的日誌記錄級別,您可以使用/冗長標誌[MSDN鏈接]改變它(http://msdn.microsoft.com/en-us/library/ms164311.aspx) –
**此選項不適用於Visual Studio 7.0-9.0(2003-2008)和C++項目!(VS 10.0將C++項目轉換爲msbuild,因此可能在那裏)。 –