演習 - パイプラインにプレビュー ステージを追加する

完了

Azure 環境に加えられる変更を確認できるように、パイプラインに別のステージを追加する必要があります。

このプロセスでは、次のことを行います。

  • パイプライン YAML ファイルを更新して、新しいプレビュー ステージを追加する。
  • Azure Pipelines に環境を追加する。
  • 承認が必要になるように環境を構成する。
  • パイプライン YAML ファイルを更新して、デプロイ ステージで環境を使用します。
  • what-if 結果を表示し、パイプラインの実行を承認する。

パイプライン定義を更新してプレビュー ステージを追加する

まず、what-if 操作を実行する新しいステージをパイプラインに追加します。

  1. Visual Studio Code で、deploy フォルダー内の azure-pipelines.yml ファイルを開きます。

  2. 検証デプロイのステージの間に、次に示すプレビュー ステージの定義を追加します。

    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. Azure DevOps で、 Pipelines>Environments に移動します。

    [パイプライン] メニューの [環境] 項目を示す Azure DevOps インターフェイスのスクリーンショット。

  2. [環境の作成] を選択します。

    環境を作成するためのボタンを示す Azure DevOps インターフェイスのスクリーンショット。

  3. 環境名として Website と入力します。

    説明は空白のままにします。 [ リソース ] セクションで、[ なし] を選択します。

    Azure Pipelines では、環境を使用してデプロイ機能を有効にします。 これらの機能の一部は、Kubernetes または仮想マシンにデプロイする場合にのみ適用されます。 このモジュールでは、これらの機能は使用せず、無視してもかまいません。

  4. [作成] を選択します

    新しい環境の Azure DevOps ページのスクリーンショット。詳細が入力され、[作成] ボタンが強調表示されます。

承認チェックを環境に追加する

  1. ページの左上隅にある [ 承認とチェック ] タブを選択します。

    Web サイト環境を示す Azure DevOps インターフェイスのスクリーンショット。[承認とチェック] タブが強調表示されています。

  2. [Approvals] を選択します。

    チェックを追加するためのページを示す Azure DevOps インターフェイスのスクリーンショット。[承認] 項目が強調表示されています。

  3. [ 承認者 ] ボックスに自分の名前を入力し、自分を選択します。

  4. 下矢印を選択して、[ 詳細設定 ] セクションを展開します。

    既定では、承認者は自分がトリガーした実行を承認することができます。 このパイプラインを操作するユーザーは他にいないため、このチェックボックスはオンのままにしておきます。

  5. [作成] を選択します

    承認チェックを追加するためのページを示す Azure DevOps インターフェイスのスクリーンショット。詳細が入力され、[作成] ボタンが強調表示されます。

環境と承認を必要とするようにパイプライン定義を更新する

次に、前に作成した Web サイト環境に対して実行するようにデプロイ ステージを構成します。 標準ジョブではなくデプロイ ジョブを実行するようにデプロイ ステージを変換し、その環境にデプロイするように構成します。

  1. Visual Studio Code で、azure-pipelines.yml ファイルのデプロイ ステージ定義を次のコードに置き換えます。

     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: Default
    
    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
    

パイプラインを実行して what-if 出力を確認する

  1. Azure DevOps で、パイプラインに移動します。

  2. パイプラインの最新の実行を選択します。

    パイプラインでリント検証プレビューの各ステージが完了するまで待ちます。 Azure Pipelines は最新の状態でページを自動的に更新しますが、ページを時々更新することをお勧めします。

  3. リソースにアクセスするためのアクセス許可を付与するように求められたら、[ 表示 ] を選択し、[ 許可] を選択します。

  4. Azure Pipelines に、承認を求めるメッセージが表示されます。 また、パイプラインで承認が必要であることを知らせる電子メールも届きます。

    パイプラインの実行を示す Azure DevOps インターフェイスのスクリーンショット。承認要件が強調表示されています。

    パイプラインの継続を承認する前に、what-if の結果を確認し、期待どおりであることを確かめます。

  5. [プレビュー] ステージを選択します。

  6. [Run what-if](what-if の実行) ステップを選択し、what-if コマンドで報告される変更点を確認します。

  7. パイプライン ログには、次の出力のような what-if 結果が表示されます。

    Resource and property changes are indicated with these symbols:
      + Create
      ~ Modify
      = Nochange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.
    

    What-If 操作で Web サイト リソースへの変更が検出されました。 ただし、検出された変更はノイズです。 リソースに対する実際の変更を表すものではありません。 Azure チームは、ノイズの削減に取り組んでいます。 それまで、この 2 つの特定のプロパティについては、検出された変更を無視できます。

    また、what-if 出力に microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite というリソースの種類の項目が表示される場合があります。 このリソースは、Application Insights によって自動的に作成されます。 リソースに変更が加えられないことが what-if コマンドで検出されます。

パイプラインの実行を承認する

  1. 左矢印を選択して、パイプラインの実行の詳細に戻ります。

    パイプライン ログ メニューを示す Azure DevOps インターフェイスのスクリーンショット。戻る矢印が強調表示されています。

  2. [承認] パネルで [確認] ボタンを選択します。

  3. [コメント] ボックスに「Reviewed what-if results」 (what-if の結果を確認済み) と入力します。

  4. [承認] を選択します。

    パイプラインの承認ページを示す Azure DevOps インターフェイスのスクリーンショット。[承認] ボタンが強調表示されています。

デプロイが成功したことを確認する

  1. パイプラインの実行を承認すると、 デプロイ ステージの実行が開始されます。

    ステージが終了するまで待ちます。

  2. パイプラインの実行が正常に終了することに注目してください。