練習 - 更新管線觸發程序

已完成

同事要求您開啟公司網站上的 App Service Always On 功能,讓網站應用程式一律處於執行狀態。

在此練習中,您將更新先前建立的管線,在「主」分支上的檔案發生變更時自動執行。 您將使用更新後的管線部署所要求的網站設定變更。

在此過程中,您將會:

  • 更新管線,使其在 deploy 資料夾和 main 分支上的檔案發生變更時自動觸發。
  • 變更 Bicep 檔案。
  • 驗證管線是否自動執行。

將觸發程序更新為按分支觸發

  1. 在 Visual Studio Code 中,開啟 deploy/azure-pipelines.yml 檔案。

  2. 移除第一行中的手動觸發程序。

  3. 在第一行新增下列觸發程序定義:

    trigger:
      batch: true
      branches:
        include:
        - main
    

    請注意,您也啟用了並行控制,以此避免管線同時進行多次執行。

  4. 儲存對檔案所做的變更。

  5. 認可變更,但還不要推送變更。 您很快就會推送這些變更。

    git add .
    git commit -m 'Add branch trigger'
    

更新 Bicep 檔案

  1. 在 Visual Studio Code 中,開啟 main.bicep 檔案。

  2. appServiceApp 資源定義的 siteConfig 屬性中,新增值為 truealwaysOn 屬性:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. 儲存對檔案所做的變更。

  4. 在 Visual Studio Code 終端機中,執行下列程式碼以認可變更並推送兩個認可:

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

驗證管線失敗

  1. 在瀏覽器中,選取 [管線],然後選取您的管線。

  2. 選取最近的執行,查看管線是否自動執行。 管線已執行,因為您已將變更推送至分支觸發程序監視的分支。 若管線仍在執行,請稍候一分鐘,然後重新整理頁面。

    顯示管線執行失敗的 Azure DevOps 螢幕擷取畫面。

    管線顯示部署失敗。

  3. 若要診斷失敗,請在 [作業] 中選取作業,然後選取失敗的 AzureResourceManagerTemplateDeployment 工作。 捲動以查看完整的錯誤訊息。 錯誤訊息包含下列文字:

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it. For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails

    此錯誤訊息表示部署失敗,因為 App Service 應用程式使用不支援 Always On 功能的 F1 免費層部署。

    重要

    此範例顯示測試 Bicep 檔案 (包括您使用的所有參數值) 有多重要。 微小錯誤很容易新增到您的資源設定或其他程式碼。 在管線部署程式碼且失敗之前,您可能都不會發現問題。 在未來的課程模組中,您將了解一些可用來驗證及測試 Bicep 程式碼的策略。

修正 Bicep 檔案,並再次查看觸發的管線

您和同事討論失敗的部署。 同時,您決定只需要為實際執行環境套用 Always On 設定。 您於此處套用決定要使用的新規則,以修正造成部署失敗的問題。

  1. 在 Visual Studio Code 中,將每個環境類型的新屬性新增至 environmentConfigurationMap 變數:

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. 變更應用程式的 alwaysOn 設定,針對環境類型使用適當的設定對應值:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. 儲存對檔案所做的變更。

  4. 在 Visual Studio Code 終端機中,認可並推送變更:

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

驗證管線成功

  1. 在 Azure DevOps 中,返回 [管線] 清單,然後選取您的管線。

  2. 選取最近的執行。 若管線仍在執行,請稍候一分鐘,然後重新整理頁面。

    顯示管線執行成功的 Azure DevOps 螢幕擷取畫面。

    管線顯示部署成功。 因為您使用的是有效的 Bicep 檔案,所以工作流程這次已成功。

清除資源

既然您已完成練習,您可以移除資源,以免產生費用。

在 Visual Studio Code [終端機] 中,執行下列命令:

az group delete --resource-group ToyWebsite --yes --no-wait

資源群組會在背景中刪除。

Remove-AzResourceGroup -Name ToyWebsite -Force