演習 - プレビュー ジョブをワークフローに追加する

完了

ワークフローにさらなるジョブを追加して、Azure 環境にどのような変更が加えられるかを確認できるようにします。

プロセスの間に、次のタスクを実行します。

  • ワークフロー定義 YAML ファイルを更新して、新しいプレビュー ジョブを追加する。
  • 環境を GitHub リポジトリに追加します。
  • レビューが必要になるように環境を構成します。
  • ワークフロー YAML ファイルを更新して、デプロイ ジョブで環境を使用します。
  • what-if 結果を表示し、ワークフローの実行を承認します。

ワークフロー定義を更新してプレビュー ジョブを追加する

ここでは、what-if 操作を実行する新しいジョブをワークフローに追加します。

  1. Visual Studio Code で、.github/workflows フォルダーにある workflow.yml ファイルを開きます。

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

    preview:
      runs-on: ubuntu-latest
      needs: [lint, validate]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Run what-if
        with:
          failOnStdErr: false
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: deploy/main.bicep
          parameters: >
            environmentType=${{ env.ENVIRONMENT_TYPE }}
          additionalArguments: --what-if
    

    プレビュー ジョブは、リンとおよび検証 ジョブが正常に完了したかどうかによって異なることに注目してください。

  3. 次のようにデプロイ ジョブを更新し、プレビュー ジョブに依存するようにします。

    deploy:
      runs-on: ubuntu-latest
      needs: preview
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  4. ファイルに加えた変更を保存します。

環境を追加する

  1. ブラウザーで、[設定]>[環境] と移動します。

  2. [New environment] (新しい環境) を選択します。

    環境 ページを示す GitHub インターフェイスのスクリーンショット。環境を作成するためのボタンが強調表示されています。

  3. 環境名として Web サイトと入力します。

  4. [環境の構成] を選択します。

    GitHub の新しい環境用のページのスクリーンショット。詳細情報の入力が完了し、[環境の構成] ボタンが強調表示されています。

このモジュールのセットアップ手順では、ワークフローを環境にデプロイするときに使用するフェデレーション資格情報を既に作成しました。

必要なレビュー担当者保護ルールを環境に追加する

  1. [必要なレビュー担当者] ボックスを選択します。

  2. 独自の GitHub ユーザー名をレビュー担当者リストに追加します。

    Web サイト環境が示されている GitHub インターフェイスのスクリーンショット。[必要なレビュー担当者] チェックボックスとテキストボックスが強調表示されています。

  3. [保護ルールの保存 (Save protection rules)] を選択します。

  4. [環境] を選択し、構成を終了します。

環境とレビュー担当者を必要とするようにワークフロー定義を更新する

ここでは、既に作成した Web サイト環境に対して実行するようにデプロイ ジョブを構成します。

  1. Visual Studio Code で workflow.yml ファイルを開きます。

  2. environment パラメーターをデプロイ ジョブに追加します。 作成した環境の名前と一致するよう、値を Website に設定します。

    deploy:
      runs-on: ubuntu-latest
      environment: Website
      needs: preview
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  3. ファイルを保存します。

ワークフロー定義を検証してコミットする

  1. deploy.yml ファイルが次のようなコードになっていることを検証します。

    name: deploy-toy-website-test
    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest
      ENVIRONMENT_TYPE: Test
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file deploy/main.bicep
    
      validate:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Run preflight validation
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
            deploymentMode: Validate
    
      preview:
        runs-on: ubuntu-latest
        needs: [lint, validate]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Run what-if
          with:
            failOnStdErr: false
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: deploy/main.bicep
            parameters: >
              environmentType=${{ env.ENVIRONMENT_TYPE }}
            additionalArguments: --what-if
    
      deploy:
        runs-on: ubuntu-latest
        environment: Website
        needs: preview
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Deploy website
          with:
            failOnStdErr: false
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    

    ファイルの外観が異なる場合は、この例に一致するようにファイルを更新し、保存します。

  2. Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。

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

ワークフローを実行して what-if 出力を確認する

  1. ブラウザーでワークフロー実行に移動します。

  2. ワークフローの最新の実行を選択します。

    ワークフローでリント検証プレビューの各ジョブが完了するまで待ちます。 GitHub によってページが最新の状態で自動的に更新されますが、ページを随時更新することをお勧めします。

  3. ワークフローによってレビューを求めるメッセージが表示されます。 GitHub アカウントの設定方法に応じて、ワークフロー確認の要求を含む電子メールか Web 通知が届きます。

    ワークフロー実行が示されている GitHub インターフェイスのスクリーンショット。レビュー要件が強調表示されています。

    後続のワークフローを承認する前に、what-if の結果を確認し、期待通りであることを確かめます。

  4. [プレビュー] ジョブを選択します。

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

  6. ワークフロー ログに次のコードのような what-if の結果が示されることに注目してください。

    Resource and property changes are indicated with these symbols:
      - Delete
      + Create
      ~ Modify
      = Nochange
      * Ignore
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/***/resourceGroups/ToyWebsiteTest
    
      ~ Microsoft.OperationalInsights/workspaces/workspace-abcdefghijklm [2022-10-01]
        - properties.retentionInDays: 30
        - properties.sku:
    
            name: "pergb2018"
    
        - properties.workspaceCapping:
    
            dailyQuotaGb: -1.0
    
      ~ Microsoft.Web/sites/toy-website-abcdefghijklm [2022-03-01]
        + properties.siteConfig.localMySqlEnabled:   false
        + properties.siteConfig.netFrameworkVersion: "v4.6"
    
      = Microsoft.Insights/components/toywebsite [2020-02-02]
      = Microsoft.Storage/storageAccounts/mystorageabcdefghijklm [2022-09-01]
      = Microsoft.Web/serverfarms/toy-website [2022-03-01]
      * microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite
    
    Resource changes: 2 to modify, 3 no change, 1 to ignore.
    

    What-If 操作によって、Log Analytics ワークスペースと Web サイト リソースの変更が検出されました。 ただし、検出された変更はノイズです。 リソースに対する実際の変更を表すものではありません。 時間の経過と共に、Azure チームによってノイズは軽減されます。 さしあたり、検出された変更は無視できます。

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

ワークフロー実行を承認する

  1. [概要] を選択して、ワークフロー実行の概要に戻ります。

    [概要] メニューが示されている GitHub インターフェイスのスクリーンショット。戻る矢印が強調表示されています。

  2. レビュー パネルにある [デプロイのレビュー] ボタンを選択します。

  3. [保留中のデプロイのレビュー (Review pending deployments)] ポップアップで、Web サイト環境を選択します。 [コメントを残す] ボックスに、レビュー済みの what-if 結果と入力します。

  4. [承認してデプロイ (Approve and deploy)] を選択します。

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

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

  1. ワークフローの実行を承認した後、デプロイ ジョブの実行が開始されることに注目してください。

    ジョブが完了するまでお待ちください。

  2. ワークフロー実行が正常に終了することに注目してください。