練習 - 將預覽階段新增至管線

已完成

您想要將額外的階段新增至管線,以檢查 Azure 環境將有何變更。

在此過程中,您將會:

  • 更新管線 YAML 檔案以新增預覽階段。
  • 將環境新增至 Azure Pipelines。
  • 將環境設定為需要核准。
  • 更新管線 YAML 檔案,以在部署階段使用環境。
  • 檢視假設狀況結果並核准管線執行。

更新管線定義以新增預覽階段

在此,您會將新的階段新增至管線,以執行假設狀況作業。

  1. 在 Visual Studio Code 中,開啟 deploy 資料夾中的 azure-pipelines.yml 檔案。

  2. 驗證部署階段之間,為預覽階段新增下列定義:

    - stage: Preview
      jobs:
      - job: PreviewAzureChanges
        displayName: Preview Azure changes
        steps:
          - task: AzureCLI@2
            name: RunWhatIf
            displayName: Run what-if
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az deployment group what-if \
                  --resource-group $(ResourceGroupName) \
                  --template-file deploy/main.bicep \
                  --parameters environmentType=$(EnvironmentType)
    
  3. 儲存對檔案所做的變更。

新增環境

  1. 在瀏覽器中,移至 [管線] > [環境]

    Screenshot of the Azure DevOps interface that shows the Pipelines menu, with the Environments item highlighted.

  2. 選取 [建立環境]

    Screenshot of the Azure DevOps interface that shows the Environments page, with the button for creating an environment highlighted.

  3. 輸入 Website 作為環境名稱。

    將描述處保留空白。 針對 [資源],選取 [無]

    注意

    在 Azure Pipelines 中,環境用來啟用部署功能。 其中一些功能只在部署至 Kubernetes 或虛擬機器時才適用。 本課程模組中不使用這些功能,可忽略。

  4. 選取 建立

    Screenshot of the Azure DevOps page for a new environment, with the details completed and the Create button highlighted.

將核准檢查新增至環境

  1. 選取畫面左上方的 [核准和檢查] 索引標籤。

    Screenshot of the Azure DevOps interface that shows the Website environment, with the Approvals and checks tab highlighted.

  2. 選取 [核准]

    Screenshot of the Azure DevOps interface that shows the page for adding a check, with the Approvals item highlighted.

  3. 在 [核准者] 文字方塊中,輸入您自己的名稱並選取您自己。

  4. 選取 [進階] 旁的箭號按鈕。

    請注意,預設允許核准者核准他們已觸發的執行。 因為您是唯一使用此管線的人,請保持選取此核取方塊。

  5. 選取 建立

    Screenshot of the Azure DevOps interface that shows the page for adding an approval check, with the details completed and the Create button highlighted.

更新管線定義以要求環境和核准

在此,您將部署階段設定為針對先前建立的網站環境執行。 您會將部署階段轉換為執行部署作業,而不是標準作業,並將其設定為部署至環境。

  1. 在 Visual Studio Code 的 azure-pipelines.yml 檔案中,將部署階段定義換成下列程式碼:

    - stage: Deploy
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        environment: Website
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: $(ServiceConnectionName)
                    deploymentName: $(Build.BuildNumber)
                    location: $(deploymentDefaultLocation)
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
    

    請注意,您定義了新的 checkout 步驟。 不同於一般作業,部署作業必須設定為從 Git 存放庫簽出 (下載) 檔案。 若未執行此步驟,部署作業無法讀取 Bicep 檔案。 您可以考慮改用「管線成品」在管線階段之間傳送檔案。 如需成品的詳細資訊,請前往摘要中的連結。

  2. 儲存檔案。

驗證並認可管線定義

  1. 確認 azure-pipelines.yml 檔案看起來像下列程式碼:

    trigger:
      batch: true
      branches:
        include:
        - main
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      - name: deploymentDefaultLocation
        value: westus3
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file deploy/main.bicep
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Validate
      jobs:
      - job: ValidateBicepCode
        displayName: Validate Bicep code
        steps:
          - task: AzureResourceManagerTemplateDeployment@3
            name: RunPreflightValidation
            displayName: Run preflight validation
            inputs:
              connectedServiceName: $(ServiceConnectionName)
              location: $(deploymentDefaultLocation)
              deploymentMode: Validation
              resourceGroupName: $(ResourceGroupName)
              csmFile: deploy/main.bicep
              overrideParameters: >
                -environmentType $(EnvironmentType)
    
    - stage: Preview
      jobs:
      - job: PreviewAzureChanges
        displayName: Preview Azure changes
        steps:
          - task: AzureCLI@2
            name: RunWhatIf
            displayName: Run what-if
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az deployment group what-if \
                  --resource-group $(ResourceGroupName) \
                  --template-file deploy/main.bicep \
                  --parameters environmentType=$(EnvironmentType)
    
    - stage: Deploy
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        environment: Website
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: $(ServiceConnectionName)
                    deploymentName: $(Build.BuildNumber)
                    location: $(deploymentDefaultLocation)
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
    

    如果不是,請將其更新以符合此範例,然後加以儲存。

  2. 在 Visual Studio Code 終端機中執行下列命令,以認可所做的變更,並將其推送至您的 Git 存放庫:

    git add .
    git commit -m "Add preview stage"
    git push
    

執行管線並檢閱假設狀況輸出

  1. 在瀏覽器中,前往您的管線。

  2. 選取管線的最近一次執行。

    等候管線完成 Lint驗證預覽階段。 雖然 Azure Pipelines 自動將頁面更新為最新狀態,但最好偶爾重新整理頁面。

  3. 如果系統要求您授與存取資源的權限,請選取 [檢視],然後選取 [允許]

  4. 請注意,Azure Pipelines 會提示您核准。 您也會收到電子郵件,告知您需要核准管線。

    Screenshot of the Azure DevOps interface that shows the pipeline run, with the approval requirement highlighted.

    在核准管線繼續之前,您需要檢閱假設狀況結果,以確定符合您的期望。

  5. 選取 [預覽] 階段。

  6. 選取 [執行假設狀況] 步驟,以檢查假設狀況命令所報告的變更。

  7. 請注意,管線記錄提供類似下列程式碼的假設狀況結果:

    Resource and property changes are indicated with these symbols:
      + Create
      ~ Modify
      = Nochange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyWebsiteTest
    
      ~ Microsoft.Web/sites/toy-website-nbfnedv766snk [2021-01-15]
        + properties.siteConfig.localMySqlEnabled:   false
        + properties.siteConfig.netFrameworkVersion: "v4.6"
    
      = Microsoft.Insights/components/toywebsite [2020-02-02]
      = Microsoft.Storage/storageAccounts/mystoragenbfnedv766snk [2021-04-01]
      = Microsoft.Web/serverfarms/toy-website [2021-01-15]
    
    Resource changes: 1 to modify, 3 no change.
    

    假設狀況作業偵測到網站資源有變更。 但偵測到的變更是雜訊。 不代表資源真的變更。 Azure 小組持續努力減少雜訊。 目前,針對這兩個特定屬性,您可以忽略偵測到的變更。

    您在假設狀況輸出中也可能看資源類型 microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite 的項目。 Application Insights 會自動建立此資源。 假設狀況命令偵測到不會變更資源。

核准管線執行

  1. 選取向左箭號以返回管線執行的詳細資料。

    Screenshot of the Azure DevOps interface that shows the pipeline log menu, with the back arrow highlighted.

  2. 在核准面板上選取 [檢閱] 按鈕。

  3. 在 [註解] 方塊中,輸入 Reviewed what-if results

  4. 選取 [核准]。

    Screenshot of the Azure DevOps interface that shows the pipeline approval page, with the Approve button highlighted.

觀察成功的部署

  1. 核准管線執行之後,請注意部署階段開始執行。

    等候階段完成。

  2. 請注意,管線執行順利完成。