練習 - 更新工作流程觸發程序

已完成

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

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

在此過程中,您將會:

  • 更新工作流程,使其在「主」分支上 deploy 資料夾中的檔案發生變更時自動觸發。
  • 變更 Bicep 檔案。
  • 驗證工作流程是否自動執行。

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

  1. 在 Visual Studio Code 中,開啟 .github/workflows/workflow.yml 檔案。

  2. 在檔案頂端,於 name: deploy-toy-website 行之後,新增下列程式碼以防止執行多個同時的工作流程:

    name: deploy-toy-website
    concurrency: toy-company
    
  3. 移除手動觸發程序,其位於目前內容為 on: [workflow_dispatch] 該行。

  4. 在 和 concurrency: 之間 permissions: 新增下列觸發程式定義:

    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
        paths:
          - 'deploy/**'
    
    permissions:
    
  5. 儲存對檔案所做的變更。

  6. 認可變更,但請先不要加以推送。 您很快就會推送變更。

    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. 在瀏覽器中,選取 GitHub 的 [動作] 功能表,然後選取您的工作流程。

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

    Screenshot of the GitHub interface showing the failed workflow run.

    工作流程會顯示失敗的部署。

  3. 若要診斷失敗原因,請選取 [部署] 作業,然後選取失敗的 [arm-deploy] 工作。

    請注意,訊息會包含下列文字:

    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@2023-12-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. 在 GitHub 中,返回 [工作流程] 清單。 選取工作流程。

  2. 選取最近的執行。 若工作流程仍在執行,請等候一分鐘,然後重新整理頁面。

    會顯示工作流程執行。

    Screenshot of the GitHub interface showing the successful workflow run.

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

清除資源

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

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

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

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

Remove-AzResourceGroup -Name ToyWebsite -Force