msdeploy の出力を解析し、エラーが発生した場合に TeamCity のビルドを失敗するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2314132

  •  22-09-2019
  •  | 
  •  

質問

ASP.Net プロジェクトをステージング サーバーにデプロイするために TeamCity から実行される msdeploy.exe を使用していますが、いくつかのエラーが発生した場合でも、終了時に常に 0 ステータスを返すという深刻な問題があります。これは、不適切なデプロイは失敗せず、すべてが正常に見えることを意味します。

したがって、出力を解析してエラーを発生させる必要があるのですが、これを行う簡単な方法はありますか?あるいは、これを行う難しい方法はありますか?

以下の 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
役に立ちましたか?

解決

TeamCity 7 にはビルド失敗機能があります。

  • ビルド構成の設定を編集する
  • [ビルド失敗条件] タブ (番号 4) に移動します。
  • 「ビルド失敗条件を追加」をクリックします。
  • 「ビルドログの特定のテキストでビルドを失敗する」タイプを選択します。
  • 「EXEC :」という文字列を使用しました。エラー数:「MSDeploy エラーをキャッチするには、うまく機能します。」
  • [テスト] ボタンをクリックすると便利なダイアログが開き、失敗するはずであることがわかっている以前のビルド ログで失敗条件をテストできます。
  • 保存

私の構成では、MSBuild から直接 msdeploy.exe を呼び出しています。それが、私のエラー テキストがあなたのものと異なる理由だと思います。

とてもクールで、これに関しては JetBrains が大好きです。

他のヒント

ここでは、リモートでデプロイするために Nant スクリプトを実行したときに、MSDeploy からビルドの失敗を捕捉するために使用したアプローチを示します。これは同じシナリオではありませんが、出発点となるコンセプトを提供するはずです。基本的にこれはシェルから実行できますが、出力をキャプチャし、msdeploy から返されるプレーン テキストを後処理するには、powershell などのスクリプト言語が必要です。私はこの問題を MSDeploy チームに報告し、これに対処するのは面倒であることを伝えました。

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

でチームシティー9ビルド構成に行くとは、失敗条件をクリックしてください。 「エラーメッセージがビルドランナーによってログに記録された」チェックボックスをチェックしてください。エラーが展開中に発生した場合、これは、ビルドに失敗します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top