2010-02-22 118 views
9

我使用msdeploy.exe從TeamCity的運行部署ASP.Net項目,以分期服務器,但如果從總返回退出狀態0,即使它提出了幾個錯誤,患有嚴重。這意味着一個不好的部署不會失敗,並且一切看起來都不錯。如何解析msdeploy的輸出,並在出現錯誤時失敗TeamCity構建?

所以我需要解析輸出,並有引發錯誤,有一個簡單的方法來做到這一點?或者,有沒有很難做到這一點?

您可以從TeamCity的構建日誌下面是怎麼回事看到(錯誤,但進行,由於0退出狀態)。

[17:32:31]: Skip copying Global.asax to obj\Debug\Package\PackageTmp\Global.asax, File obj\Debug\Package\PackageTmp\Global.asax is up to date 
[17:32:31]: C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(1845,5): error : Copying file Web.Debug.config to obj\Debug\Package\PackageTmp\Web.Debug.config failed. Could not find file 'Web.Debug.config'. [C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj] 
[17:32:31]: Done Building Project "C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj" (Package target(s)) -- FAILED. 
[17:32:31]: Build FAILED. 
[17:32:31]: "C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj" (Package target) (1) -> 
[17:32:31]: (ValidateGlobalPackageSetting target) -> 
[17:32:31]: C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(817,5): error : '..\Package\WebApp.zip' exists as a file. You can't package as an archive directory to be the same path as an existing file. Please delete the file before packaging. Alternative,you can call msbuild with /t:CleanWebsitesPackage target to remove it. [C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj] 
[17:32:31]: "C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj" (Package target) (1) -> 
[17:32:31]: (CopyAllFilesToSingleFolderForPackage target) -> 
[17:32:31]: C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(1845,5): error : Copying file Web.Debug.config to obj\Debug\Package\PackageTmp\Web.Debug.config failed. Could not find file 'Web.Debug.config'. [C:\BuildAgent\work\f3548ee02a6397b9\webapp\WebApp.csproj] 
[17:32:31]: 0 Warning(s) 
[17:32:31]: 2 Error(s) 
[17:32:31]: Time Elapsed 00:00:00.87 
[17:32:31]: C:\BuildAgent\work\f3548ee02a6397b9>"C:\Program Files\IIS\Microsoft Web Deploy"\msdeploy.exe -verb:sync -source:Package=Package\WebApp.zip -dest:auto -setParam:"IIS Web Application Name"=MyWebName 
[17:32:32]: Info: Updating setAcl (MyWebName). 
[17:32:32]: Info: Updating setAcl (MyWebName). 
[17:32:32]: Info: Updating setAcl (MyWebName/App_Data). 
[17:32:32]: Total changes: 3 (0 added, 0 deleted, 3 updated, 0 parameters changed, 0 bytes copied) 
[17:32:32]: Process exited with code 0 
[17:32:32]: Build finished 

回答

13

的TeamCity 7有一個內置的故障特點:

  • 編輯設置您的構建配置
  • 轉到構建失敗條件選項卡(4號)
  • 點擊「添加構建失敗條件」
  • 選擇‘失敗建立在構建日誌中的特定文本’類型
  • 我使用字符串「EXEC:錯誤計數:」來捕捉MSDeploy錯誤,它效果很好
  • 測試按鈕打開一個方便的對話框,您可以在先前的構建日誌上測試您知道應該失敗的故障條件
  • 保存

在我的配置中,我直接從MSBuild調用msdeploy.exe,我想這就是爲什麼我的錯誤文本與你的不同。

很酷,愛JetBrains公司這一點。

+3

這是一個很好的解決方案,我完全忽略了一個。它運作良好。僅供參考,我使用的正則表達式文本選項的值爲「錯誤計數:[1-999]」,這似乎適用於基於MSBuild的任務。 – keithl8041 2013-05-14 16:12:49

+1

@ keith8041:這將始終有效,但要注意'[1-999]'意味着:'一個字符可以是1到9,或9或9',它只匹配'錯誤計數:'。我認爲你的意思是:'錯誤計數:[1-9] [0-9] *'。注意:我只是在這裏挑剔。 – 2014-07-04 11:40:27

3

這是我用來從遠程部署運行Nant腳本進行部署時用於捕獲MSDeploy構建失敗的一種方法。它不是一個完全相同的scenerio,但應該給你一個概念。基本上你可以從一個shell運行,你需要一個像powershell這樣的腳本語言來捕獲輸出,並且處理從msdeploy返回的純文本。我與MSDeploy團隊討論了這個問題,讓他們知道這是一個很難處理的問題。

http://www.lostechies.com/blogs/hex/archive/2009/12/29/update-on-using-msdeploy-for-remote-deployments.aspx

0

在TeamCity的9去構建配置,然後單擊故障情況。選中複選框「一個錯誤消息由build runner記錄」。如果在部署過程中發生錯誤,這會使構建失敗。

相關問題