2010-02-22 117 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记录”。如果在部署过程中发生错误,这会使构建失败。

相关问题