如果出现错误,如何解析msdeploy的输出并使TeamCity构建失败?

如果出现错误,如何解析msdeploy的输出并使TeamCity构建失败?,teamcity,msdeploy,Teamcity,Msdeploy,我正在使用TeamCity运行的msdeploy.exe将ASP.Net项目部署到临时服务器,但如果退出时总是返回0状态,即使会引发多个错误,也会受到严重影响。这意味着一个糟糕的部署不会失败,而且看起来一切正常 所以我需要解析输出并让它引发一个错误,有没有一种简单的方法可以做到这一点?或者,有没有一种很难做到的方法 您可以从下面的TeamCity构建日志中看到发生了什么(错误,但由于0退出状态而继续) 当我运行Nant脚本进行远程部署时,我使用了一种方法从MSDeploy中排除构建失败。这不是一

我正在使用TeamCity运行的msdeploy.exe将ASP.Net项目部署到临时服务器,但如果退出时总是返回0状态,即使会引发多个错误,也会受到严重影响。这意味着一个糟糕的部署不会失败,而且看起来一切正常

所以我需要解析输出并让它引发一个错误,有没有一种简单的方法可以做到这一点?或者,有没有一种很难做到的方法

您可以从下面的TeamCity构建日志中看到发生了什么(错误,但由于0退出状态而继续)


当我运行Nant脚本进行远程部署时,我使用了一种方法从MSDeploy中排除构建失败。这不是一个完全相同的场景,但应该给你一个概念。基本上,您可以从一个shell运行它—您需要一种脚本语言(如powershell)来捕获输出,然后对从msdeploy返回的纯文本进行后期处理。我向MSDeploy团队提出了这个问题,并让他们知道这是一个很难处理的问题


TeamCity 7具有构建失败功能:

  • 编辑生成配置上的设置
  • 转到“生成失败条件”选项卡(编号4)
  • 单击“添加生成失败条件”
  • 选择“生成日志中特定文本的生成失败”类型
  • 我使用字符串“EXEC:error count:”来捕获MSDeploy错误,它工作得很好
  • “测试”按钮将打开一个方便的对话框,在该对话框中,您可以在您知道应该失败的先前生成日志上测试您的失败条件
  • 拯救
在我的配置中,我直接从MSBuild调用msdeploy.exe,我认为这就是我的错误文本与您的不同的原因


非常酷,喜欢JetBrains。在TeamCity 9中,转到构建配置并单击故障条件。选中复选框“生成运行程序记录了错误消息”。如果在部署过程中发生错误,这将使您的构建失败。

这是一个很好的解决方案,我完全忽略了这一点。它工作得很好。仅供参考,我使用了值为“Error count:[1-999]”的regexp text选项,该选项对于基于MSBuild的任务似乎可以正常工作。@keith8041:这将始终有效,但请注意,
[1-999]
意味着:
一个字符可以是1到9,或9或9
,它只匹配
错误计数之后的第一个字符:
。我想你的意思是:
错误计数:[1-9][0-9]*
。注意:我只是吹毛求疵。
[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