由於我們的團隊不斷增長構建服務器的需求,直到最終成爲我們解決的項目。Team Foundation Server 2013的非確定性構建服務器行爲
我們有一個主控項目,它在提交到開發分支後排隊進行自動部署。問題是,構建服務器可以排隊相同的構建,相同的修訂,並得到非常不同的結果。有時候我們會得到一個乾淨的版本,按預期部署到我們的測試服務器。在其他時候,我們可以排隊構建並獲得「無法複製文件C:\ Builds \ 7424 \ Project Name \ Container Build \ bin \ somerandomreference。訪問路徑C:\ Builds \ 7424 \ Project Name \ Container Build \ bin \ somerandomreference被拒絕「。
或者我們得到:無法複製文件「Scripts \ somerandom.js」,因爲找不到它。
或者我們得到「無法複製... EntityFrameWork.XML」,因爲它正在被另一個進程使用。
這些讓我相信問題在於我們的構建重疊,所以我們已經設置了隊列來添加額外的提交,直到先前的構建完成。
唯一的防病毒軟件是運行構建服務器的Windows 8.1計算機上的默認Microsoft Windows Defender。最初我們排除了構建文件夾,現在我們把它完全關閉。
沒有人使用這臺機器,它專用於構建服務器角色,並且不運行其他軟件,只包含我們構建過程的需求安裝。
我是否缺少構建服務器的最佳實踐?我是否樂觀地期望構建服務器應該以可重現的方式構建相同的分支和版本源(即使它是可重現的失敗)?
更新:刪除整個生成文件夾,並設置備份之後,我們得到這個(溶液編譯零次失誤,但沒有測試結果或輸出):
Exception Message: Error HRESULT E_FAIL has been returned from a call to a COM component. (type COMException)
Exception Stack Trace: at Microsoft.TeamFoundation.WorkItemTracking.Client.DataStore.DataStoreNative.BeginDataStoreInit(IntPtr handle, String defaultCachePath, String instanceId, Int32 cacheVersion)
at Microsoft.TeamFoundation.WorkItemTracking.Client.DataStore.Datastore.BeginDataStoreInit(String defaultCachePath, String instanceId, Int32 cacheVersion)
at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.InitializeInternal()
at Microsoft.TeamFoundation.Client.TfsTeamProjectCollection.InitializeTeamFoundationObject(String fullName, Object instance)
at Microsoft.TeamFoundation.Client.TfsConnection.CreateServiceInstance(Assembly assembly, String fullName)
at Microsoft.TeamFoundation.Client.TfsConnection.GetService(Type serviceType)
at Microsoft.TeamFoundation.Client.TfsConnection.GetServiceT
at System.Activities.Runtime.ActivityExecutor.ExecuteInResolutionContextT
at System.Activities.InArgument`1.TryPopulateValue(LocationEnvironment targetEnvironment, ActivityInstance activityInstance, ActivityExecutor executor)
at System.Activities.ActivityInstance.InternalTryPopulateArgumentValueOrScheduleExpression(RuntimeArgument argument, Int32 nextArgumentIndex, ActivityExecutor executor, IDictionary`2 argumentValueOverrides, Location resultLocation, Boolean isDynamicUpdate)
at System.Activities.ActivityInstance.ResolveArguments(ActivityExecutor executor, IDictionary`2 argumentValueOverrides, Location resultLocation, Int32 startIndex)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)
UPDATE2:過程似乎是仍然有問題,但不太常見。下面是今天早上非致命錯誤的例子:
C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (3540): 無法複製「 C:\ Builds \ 7419 \ Policy Tracker \ Container Build \ src \ Stage \ packages \ Microsoft.Owin.Security.Cookies.3.0.1 \ lib \ net45 \ Microsoft.Owin.Security.Cookies.dll「 」C: \ Builds \ 7419 \ Policy Tracker \ Container Build \ bin \ Microsoft.Owin.Security.Cookies.dll「。從 1000ms開始重試1。該進程無法訪問文件'C:\ Builds \ 7419 \ Policy Tracker \ Container Build \ bin \ Microsoft.Owin.Security.Cookies.dll' 因爲它正在被另一個進程使用。
我目前正在投資http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx作爲問題的可能來源(錯誤的解決方案排序)。這適用於以前的版本,但症狀看起來非常相似。
您是否修改了構建過程模板?這聽起來像你已經做了一些修改,造成構建過程中的問題,而不是模板中固有的問題。 –
沒有任何構建腳本已被更改。奇怪的是,這個錯誤發生了幾次,然後也消失了(除了時間之外,我沒有任何干預)。 – Godeke
您的項目文件中是否有前/後編譯操作? –