Azure App Service で実行されている ASP.NET Web API アプリケーションがあり、TFS ビルド定義が完了した後、Octopus を介してデプロイされます。
特定のデプロイが成功した後 (TFS でも Octopus でもエラーは発生しません)、API 全体が動作を停止し、すべてのエンドポイントが次のエラーで応答します。
System.BadImageFormatException
Index not found. (Exception from HRESULT: 0x80131124)
スタック トレースは次のようになります。
System.BadImageFormatException: Index not found. (Exception from HRESULT: 0x80131124)
at System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state)
at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TState](AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
このエラーは、ソース コードの特定の一連の変更や特定のアクションに関連していないように見えるため、少し不思議です。ランダムに見えるのはそのためです。現時点で、これを一時的に解決する唯一の方法は、同じ Octopus のパッケージを再デプロイすることです。これにより、API が復元されます。
ただし、このエラーが発生したときにアプリケーションで実際に何が起こっているかを理解しておくと役立ちます。見つからないインデックスはどれですか? BadImageFormatException を取得するとはどういう意味ですか?
私は、Octopus と Azure Web App の間で何かが起こっているのではないかと考えています。
いくつかの追加情報:
Octopus のバージョンは v2018.6.2 です
TFS のバージョンは 15.117.27414.0 です
ASP.NET アプリのターゲットは .NET 4.5.2 です
私が見つけたもう 1 つの情報は、Octopus での最初の展開 (失敗を引き起こしたもの) の後、ログに次の行を見たことです。
17:16:00 Info | Successfully deployed to Azure. 0 objects added. 48 objects updated. 0 objects deleted.
ここで、Octopus での 2 回目のデプロイ (失敗したリリースの再デプロイ) の後、「0 個のオブジェクトが更新された」と予想されますが、代わりに次の行が表示されました。
18:48:57 Info | Successfully deployed to Azure. 0 objects added. 3 objects updated. 0 objects deleted.