使用 Azure 開發者命令列界面 (CLI) 部署到 Azure 應用服務的部署插槽

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 upazd provisionazd 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 來提升該插槽進入生產環境。

  1. 在你的 Bicep 範本中定義一個或多個 App Service 部署時段。
  2. 透過使用 azd provisionazd up來配置 App Service 資源。
  3. 讓第一次部署時,在主應用程式和每個時段建立基準。
  4. 透過設定 AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME,當你有兩個或以上的插槽時,或在提示時選擇該插槽,來將後續應用程式更新部署到暫存插槽。
  5. 驗證分階段部署。
  6. 執行 azd appservice swap --src <slot> --dst @main 以促進這次發行。
  7. 如果需要,執行反向交換來還原。