2013-04-23 104 views
1

我們已經開始將我們的幾個項目之一遷移到團隊城市作爲CI的一部分。以下是我們如何設置teamcity構建。我們正在嘗試部署WebSite。TeamCity「.Net Process Runner」掛起

1)構建步驟1(封裝安裝)

使用 「命令行」 轉輪型安裝所需包。

2)構建步驟2(構建)

使用轉輪式 「的Visual Studio(SLN)」(Visual Studio 2010中)建立的網站。

3)建設第3步(部署Web網站)

使用 「淨過程的人」,deployer.exe(x86平臺上的.Net框架內置4)部署網站。

Deployer.exe讀取配置文件。配置文件包含我們想要構建的「BuildId」,「Environment」和「Servers」。

<buildType id="bt52"> 
    <env name="Debug"> 
     <server path="SERVER1" /> 
    </env> 
    <env name="QA"> 
    <server path="SERVER2" /> 
    <server path="SERVER3" /> 
</env> 
<env name="UAT"> 
    <server path="SERVER4" /> 
    <server path="SERVER5" /> 
</env> 
</buildType> 

Deployer.exe被調用時需要的參數如下。它讀取配置並將站點部署到Server2和Server3。

Deployer.exe 「BT52」, 「質量保證」, 「siteQA」 「E:\ BuildAgent \工作\ 2483052e33e5e1e8的\ src \ DIY \」 msdeploy.exe

方面的問題是步驟#3。

當我們使用.Net進程運行器作爲團隊城市的一部分運行deployer.exe時,我們會看到它掛起,並且在45分鐘內沒有響應某個時間。當我們嘗試使用命令行腳本從構建服務器執行相同的deployer.exe時,會在幾秒鐘內執行。

E:\ TeamCity_custom_applications \部署> Deployer.exe farm1-1 QA siteQA E:\ BuildAgent \工作\ 2483052e33e5e1e8的\ src \ DIY \ msdeploy.exe

信息

:處理批處理運行...信息:處理命令... msdeploy.exe -verb:sync -source:contentPath =「E:\ BuildAgent \ work \ 2483052e33e5e1e8 \ src \ diy \」-dest:contentPath =「siteQA」 ,wmsvc =「SERVER2」,userName =「*****」,password =「******」,authType =「Basic」-skip:objectName = filePath,absolutePath = web.config -s kip:objectName = dirPath,absolutePath =「bin」-enableRule:DoNotDeleteRule -allowUntrusted Info:輸出>>全部更改:0(0增加,0刪除,0更新,0參數更改,0 字節複製)信息:錯誤>> (無)信息:的ExitCode >> 0資料:

處理命令msdeploy.exe -verb:同步 -source:=的contentPath 「E:\ BuildAgent \工作\ 2483052e33e5e1e8的\ src \ DIY \」 -dest :contentPath =「siteQA」,wmsvc =「SERVER3」,userName =「******」,password =「******」,authType =「Basic」 -skip:objectName = filePath,absolutePath = web.config -skip:objectName = dirPath,absolutePath =「bin」-enableRule:DoNotDeleteRule -allowUntrusted Info:輸出>>總變化:0(0增加,0刪除,0更新,0參數變化,0 字節複製)信息:錯誤>>(無)信息:ExitCode >> 0

信息:部署腳本完成。

我們觀察到的另一件事是通過teamcity運行deployer.exe我看到網站內容被複制,但只有1臺服務器和teamcity構建狀態保持「運行」模式。我想知道是否有人可以請一點洞察力,我怎樣才能看到這個問題。

更新1:

感謝您的時間尋找到它!我們最終做的是,我們不是從「cmd.exe」運行命令「msdeploy.exe」,而是將「msdeploy.exe」位置添加爲環境變量,並在服務器的#號循環中執行「msdeploy.exe」。這已經解決了懸掛問題。現在我只是想知道爲什麼它會以這種方式運行,如果從「cmd.exe」執行「msdeploy.exe」,它將在直接運行「msdeploy.exe」時掛起,它會成功執行。任何洞察相同將不勝感激。

更新2:

我添加圖像,其使用Process Explorer的解釋行爲。如果我們從進程資源管理器中終止msdeploy.exe,那麼所有到該服務器的部署都不會有掛起問題。請參考下面的圖像

enter image description here

回答

0

解決辦法我們做的是,我們觀察到msdeploy沒有需要3-5秒以上來執行和部署(即使我們最大的項目是近300mb的網站)。所以我們設置了20秒的超時時間。到目前爲止,自從最近1周以來,我們還沒有看到任何問題,希望它不會造成更多麻煩,但我們仍然不確定這種行爲的原因。

0

說實話,這聽起來像你正在運行到問題與重定向輸入/輸出流。 TeamCity的運行你的應用程序在一個完全無頭環境,然後你,反過來,正試圖重定向和解析的msdeploy.exe

輸出。如果是那樣的話,我會建議考慮使用MSDeploy API代替msdeploy.exe。後者只是前者的命令行包裝器,因此所有功能都可供您使用。如果您需要入門幫助,可以在IIS博客上找到sample deployment application

+0

感謝理查!我無法理解爲什麼TeamCity => Cmd => MsDeploy(有時可以工作(20-30%),有時會完全掛起(70-80%))會導致問題,而TeamCity => MsDeploy可以工作。我認爲MSDEPLOY Api是非常好的資源。感謝分享。 – TorontoKid 2013-04-24 13:23:38

0

看來你已經在TeamCity中配置了NUnit構建步驟,並從你的測試中調用了cmd.exe。這看起來像是測試代碼的問題。如果您直接使用NUnit運行測試,最有可能的情況是它會在沒有TeamCity的情況下重現。

正如理查德指出的,最可能的問題根源與標準輸入/標準輸出處理有關。 如果你想在你的代碼中修復它,你可以嘗試通過明確地關閉stdin或其他方式來嘗試,嘗試寫入東西,等等。

+0

謝謝!我已經添加了代碼來這樣做。讓我們看看我們是否遇到任何問題。另一個問題是,這個問題的發生是如此隨機,我們無法預測什麼時候會發生。所以我必須等待幾天才能確認Richard的答案。 – TorontoKid 2013-05-07 19:57:59

+0

關閉流沒有幫助我。我們所做的是,我們觀察到msdeploy不需要超過3-5秒的時間來執行和部署。所以我們設置了20秒的超時時間。到目前爲止,自從最近1周以來,我們還沒有看到任何問題,希望它不會造成更多麻煩,但我們仍然不確定這種行爲的原因。 – TorontoKid 2013-05-16 11:43:21