我們已經開始將我們的幾個項目之一遷移到團隊城市作爲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,那麼所有到該服務器的部署都不會有掛起問題。請參考下面的圖像
感謝理查!我無法理解爲什麼TeamCity => Cmd => MsDeploy(有時可以工作(20-30%),有時會完全掛起(70-80%))會導致問題,而TeamCity => MsDeploy可以工作。我認爲MSDEPLOY Api是非常好的資源。感謝分享。 – TorontoKid 2013-04-24 13:23:38