注意:因應佈署策略不同,可能會進行停機佈署,須注意不要將正常停機程序,因為Health Check變成阻礙佈署的絆腳石
CI/CD 流程概略圖如下。從 Repo 取得 master branch 後於 Build Agent 進行 restore、build、test、code analysis ...等工作,產生出 artifact 後進行 release。我們在 release 前新增了一項工作:Health Check,確認每項服務沒有回傳 503 錯誤後,才開始正式佈署。
在 Visual Studio Marketplace 網站上,你可以找到 Azure DevOps Asp.Net Core Health Check extensions, 您可以點選 Get it free 安裝至 Azure DevOps Service/Server。
我們回到 Azure DevOps Pipelines 內的 Release > 新增或編輯既有的 Release > 點選Prod 的 pre-condition
啟用 Gates,並點選 Add 按鈕加入 ASP.NET Core Health Checks
設定 Health 服務 Uri,藉此監控相依服務健康狀態
比較特別的是,在自訂 Health Check Response 使用的是 UI 的 ResponseWriter (UIResponseWriter.WriteHealthCheckUIResponse),且需要回傳 Http Status Code 為503。如下程式碼。
如果您對於這段程式碼有些陌生,建議您先閱讀 如何為 ASP.NET Core 與相依服務建立執行狀態檢查 系列的文章,主要說明是 自訂 Health Checks Response 與 Health Checks UI 圖形化介面呈現服務健康狀態 這兩篇文章。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
endpoints.MapHealthChecks("/health", new HealthCheckOptions() | |
{ | |
ResultStatusCodes = | |
{ | |
[HealthStatus.Healthy] = StatusCodes.Status200OK, | |
[HealthStatus.Degraded] = StatusCodes.Status503ServiceUnavailable, | |
[HealthStatus.Unhealthy] = StatusCodes.Status503ServiceUnavailable, | |
}, | |
Predicate = _ => true, | |
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse | |
}); |
如此一來,即完成我們的設定。更多詳細內容請參考:Azure DevOps Asp.Net Core Health Check extensions
0 留言