Azure Developer CLI (azd) 支援在 Azure App Service 上託管的應用程式使用 Azure App Service 部署插槽。 你可以在基礎設施中定義插槽,將程式碼部署到特定插槽,並在準備好推廣版本時交換插槽。
此方法可用於佈署前測試、藍綠部署、煙霧測試及回復,無需新增自訂部署腳本。
先決條件
- 一個
azd將服務部署到 Azure App Service 的專案。 - 定義 Bicep 中 App Service 資源的基礎架構即程式碼。
- 標準()等級或更高等級的 App Service 方案
S1。 免費、共享和基本層級不支援部署欄位。
在 Bicep 中定義部署插槽
像平常一樣定義你的生產地點,然後為每個你想Microsoft.Web/sites/slots鎖定的時段加入一個azd資源。
resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
name: 'my-appservice-plan'
location: resourceGroup().location
sku: {
name: 'S1'
tier: 'Standard'
}
}
resource webApp 'Microsoft.Web/sites@2021-03-01' = {
name: 'my-appservice'
location: resourceGroup().location
kind: 'app'
properties: {
serverFarmId: appServicePlan.id
}
}
resource stagingSlot 'Microsoft.Web/sites/slots@2021-03-01' = {
name: '${webApp.name}/staging'
location: webApp.location
properties: {}
}
如果你使用 Azure Verified Modules(AVM),請在同一部署中定義網頁應用程式和部署槽模組,並將應用程式名稱傳給槽位模組。
使用 azd 部署到插槽
依照往常執行azd up、azd provision和azd deploy。
azd up
第一次部署時,將 azd 部署到生產網站及基礎設施中定義的任何插槽。 這次首次部署是在主應用程式和每個插槽建立相同的基準。
第一次部署後,azd deploy 在有插槽時,會改變以選擇部署目標的方式。
azd 當有空位時,也不會直接部署到生產應用程式。 相反地,你先部署到某個時段,驗證發佈,然後再把它切換到生產環境。
azd 如何選擇部署目標
當 azd deploy 執行有部署時段的 App Service 時,會透過查看主應用程式的部署歷史,然後評估可用時段來選擇目標。
行為如下:
- 如果不存在先前部署,則
azd部署到主應用程式及所有部署插槽。 - 如果之前有部署且沒有部署位置,則
azd只會部署到主應用程式。 - 如果之前有部署且剛好有一個時段,則
azd只能部署到該時段。 - 如果之前有部署且有兩個或以上的欄位,
azd會使用環境變數指定的欄位,或提示你選擇一個。
Important
第一次部署後, azd 當有空位時,它不會直接部署到主 App Service 應用程式。 此行為是刻意設計,有助於防止意外直接部署至生產環境。 要更新生產環境,先部署到某個槽位,然後將該槽位切換到生產環境(@main)。
選擇一個帶有環境變數的槽位
當你的服務在第一次部署後有兩個或以上時段時,你可以透過設定想要部署的服務環境變數來跳過互動提示。
請使用下列格式:
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME
從服務名稱 azure.yaml 中建立變數名稱,方法是使用大寫字母,並用底線替換連字號。
例如,如果你的服務名稱 my-api為 ,請使用 AZD_DEPLOY_MY_API_SLOT_NAME。
azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api
在執行azd deploy之前,你可以使用azd env set將此值存儲在你的azd環境中,或者在你的持續整合系統中直接定義。
如果你的服務只有一個插槽, azd 則忽略環境變數,因為只有一個可能的部署目標。
如果你的服務有兩個或以上時段,且環境變數未設定,系統 azd 會提示你選擇時段。
CI 與非互動行為
當你從 CI 執行 azd deploy --no-prompt 或部署時,槽位選擇會根據可用槽位數量而有所不同:
| 老虎機 | 環境變數行為 | Result |
|---|---|---|
0 |
不適用。 |
azd 部署到主應用程式。 |
1 |
忽略。 |
azd 部署到唯一的插槽。 |
2+ |
必須避免被提示。 |
azd 部署至指定時段,若無法選擇時段則失敗。 |
如果要自動化部署具有兩個或以上插槽的 App Service,請在執行 azd deploy 之前,先在 pipeline 環境中設定 AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME。
開關 Azure App Service 部署插槽
驗證後用 azure.appservice 擴充功能交換槽位。 如果擴充功能還沒安裝 azd ,第一次執行指令時會提示你安裝。
執行互動體驗:
azd appservice swap
如果只有一個非製作欄位,則 azd 跳過提示,直接與製作部門交換。
在自動化過程中,請明確指定來源和目地欄位。 用 @main 來參考生產時段。
azd appservice swap --src staging --dst @main
azd appservice swap --src @main --dst staging
azd appservice swap --service myapi --src staging --dst @main
利用這些模式來支持常見的釋放流程:
- 將驗證過的暫存部署推廣至生產環境。
--src staging --dst @main - 回滾時,將生產線切換回預備槽
--src @main --dst staging。 - 鎖定在多服務
azd專案中的特定以 App Service 支援的服務,並使用--service。
配置好插槽後, 交換是用來更新生產環境的指定途徑。 用 azd deploy 來更新一個插槽,然後用 azd appservice swap 來提升該插槽進入生產環境。
建議的部署插槽工作流程
- 在你的 Bicep 範本中定義一個或多個 App Service 部署時段。
- 透過使用
azd provision或azd up來配置 App Service 資源。 - 讓第一次部署時,在主應用程式和每個時段建立基準。
- 透過設定
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME,當你有兩個或以上的插槽時,或在提示時選擇該插槽,來將後續應用程式更新部署到暫存插槽。 - 驗證分階段部署。
- 執行
azd appservice swap --src <slot> --dst @main以促進這次發行。 - 如果需要,執行反向交換來還原。