演習 - パイプラインにプレビュー ステージを追加する
Azure 環境に加えられる変更を確認できるように、パイプラインに別のステージを追加する必要があります。
このプロセスでは、次のことを行います。
- パイプライン YAML ファイルを更新して、新しいプレビュー ステージを追加する。
- Azure Pipelines に環境を追加する。
- 承認が必要になるように環境を構成する。
- パイプライン YAML ファイルを更新して、デプロイ ステージで環境を使用します。
- what-if 結果を表示し、パイプラインの実行を承認する。
パイプライン定義を更新してプレビュー ステージを追加する
まず、what-if 操作を実行する新しいステージをパイプラインに追加します。
Visual Studio Code で、deploy フォルダー内の azure-pipelines.yml ファイルを開きます。
検証とデプロイのステージの間に、次に示すプレビュー ステージの定義を追加します。
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)
ファイルに加えた変更を保存します。
環境を追加する
Azure DevOps で、 Pipelines>Environments に移動します。
[環境の作成] を選択します。
環境名として Website と入力します。
説明は空白のままにします。 [ リソース ] セクションで、[ なし] を選択します。
注
Azure Pipelines では、環境を使用してデプロイ機能を有効にします。 これらの機能の一部は、Kubernetes または仮想マシンにデプロイする場合にのみ適用されます。 このモジュールでは、これらの機能は使用せず、無視してもかまいません。
[作成] を選択します
承認チェックを環境に追加する
ページの左上隅にある [ 承認とチェック ] タブを選択します。
[Approvals] を選択します。
[ 承認者 ] ボックスに自分の名前を入力し、自分を選択します。
下矢印を選択して、[ 詳細設定 ] セクションを展開します。
既定では、承認者は自分がトリガーした実行を承認することができます。 このパイプラインを操作するユーザーは他にいないため、このチェックボックスはオンのままにしておきます。
[作成] を選択します
環境と承認を必要とするようにパイプライン定義を更新する
次に、前に作成した Web サイト環境に対して実行するようにデプロイ ステージを構成します。 標準ジョブではなくデプロイ ジョブを実行するようにデプロイ ステージを変換し、その環境にデプロイするように構成します。
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 ファイルを読み取ることができません。 代わりに "パイプライン アーティファクト" を使用して、パイプライン ステージ間でファイルを送信することもできます。 モジュールの概要には、成果物に関する詳細情報へのリンクが含まれています。ファイルを保存します。
パイプライン定義を確認してコミットする
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)
見た目が同じではない場合は、この例に一致するように更新してから保存します。
Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。
git add . git commit -m "Add preview stage" git push
パイプラインを実行して what-if 出力を確認する
Azure DevOps で、パイプラインに移動します。
パイプラインの最新の実行を選択します。
パイプラインでリント、検証、プレビューの各ステージが完了するまで待ちます。 Azure Pipelines は最新の状態でページを自動的に更新しますが、ページを時々更新することをお勧めします。
リソースにアクセスするためのアクセス許可を付与するように求められたら、[ 表示 ] を選択し、[ 許可] を選択します。
Azure Pipelines に、承認を求めるメッセージが表示されます。 また、パイプラインで承認が必要であることを知らせる電子メールも届きます。
パイプラインの継続を承認する前に、what-if の結果を確認し、期待どおりであることを確かめます。
[プレビュー] ステージを選択します。
[Run what-if](what-if の実行) ステップを選択し、what-if コマンドで報告される変更点を確認します。
パイプライン ログには、次の出力のような 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 コマンドで検出されます。
パイプラインの実行を承認する
左矢印を選択して、パイプラインの実行の詳細に戻ります。
[承認] パネルで [確認] ボタンを選択します。
[コメント] ボックスに「Reviewed what-if results」 (what-if の結果を確認済み) と入力します。
[承認] を選択します。
デプロイが成功したことを確認する
パイプラインの実行を承認すると、 デプロイ ステージの実行が開始されます。
ステージが終了するまで待ちます。
パイプラインの実行が正常に終了することに注目してください。