くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

ASP.NET Core な Web アプリを Azure Web Apps に VSTS から CI/CD するときに、Error Code: ERROR_FILE_IN_USE って出る

環境

  • ASP.NET Core
  • Azure Web Apps
  • Deployment Slot は使ってない
  • VSTS

現状

App Service に Deploy しようとしていますが、 ASP.NET Core アプリ(.dll) がロックされていてデプロイできないです。 再起動すればデプロイ自体はできるようになりますが、 デプロイするたびに再起動していては人権がないのでそこも解決していきます。

エラーメッセージ

2017-11-09T11:24:34.6820290Z ##[error]Failed to deploy App Service.
2017-11-09T11:24:34.6830278Z ##[error]Error Code: ERROR_FILE_IN_USE
2017-11-09T11:24:34.6830278Z More Information: Web Deploy cannot modify the file '{ProjectName}.dll' on the destination because it is locked by an external process.  In order to allow the publish operation to succeed, you may need to either restart your application to release the lock, or use the AppOffline rule handler for .Net applications on your next publish attempt.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE.
2017-11-09T11:24:34.6830278Z Error count: 1.
2017-11-09T11:24:35.4658925Z ##[error]Error: C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe failed with return code: 4294967295
2017-11-09T11:24:35.4758869Z ##[section]Finishing: Azure App Service Deploy: {webAppName}

対策

App Service の終了と起動の処理を Build Task に追加した

具体的な方法

  1. App Service の終了と起動を行う Extension を VSTS に追加する
  2. Build Task に設定する

App Service に 必要な Extension を追加する

以下の Extension を入れます。

Under certain circumstances, you will have to stop your Azure AppService / Azure WebApp before deployment as it may lock DLL-files (and thus prevent a successful deployment).

ウケるw

marketplace.visualstudio.com

Build Task に App Service の再起動を定義してく

以下のように 再起動してくれるタスクが追加されています。

https://lh3.googleusercontent.com/-MwkR1R2f6f4/WgRASpi4NUI/AAAAAAAAN1A/7oJkEkZF220aEsKAxYiCdNjRKimqkxorACHMYCw/s0/chrome_2017-11-09_20-47-19.png

完成形は以下のようになります。

https://lh3.googleusercontent.com/-tDhLm314hcU/WgRAGNODnvI/AAAAAAAAN08/Jalj1RE48LwJDVm62CjShkbNlEg0Hz-DwCHMYCw/s0/chrome_2017-11-09_20-46-23.png