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

完了

パイプラインにさらなるステージを追加して、Azure 環境にどのような変更が加えられるかを確認できるようにします。

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

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

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

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

  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. ブラウザーで、[Pipelines]>[環境] に移動します。

    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 と入力します。

    説明は空白のままにします。 [リソース] には [なし] を選択します。

    Note

    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. [Approvals] を選択します。

    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.

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

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

  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
    

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

  1. ブラウザーでパイプラインに移動します。

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

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

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

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

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

    パイプラインの継続を承認する前に、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/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.
    

    what-if 操作によって、Web サイト リソースへの変更が検出されました。 ただし、検出された変更はノイズです。 リソースに対する実際の変更を表すものではありません。 時間の経過と共に、Azure チームによってノイズは軽減されます。 それまで、この 2 つの特定のプロパティについては、検出された変更を無視できます。

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

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

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

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

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

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

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

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

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

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

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

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