演習 - 自分のパイプラインにリンティングと検証ステージを追加する
あなたはチームと話し合い、パイプラインを使用してデプロイをさらに自動化することを決定しました。 より自信を持って、デプロイする対象を構築する必要があります。
この演習では、検証ステージをパイプラインに追加します。 次に、各デプロイの前に、リンターとプレフライト検証を実行します。
このプロセスでは、次のことを行います。
- 既存のパイプラインを更新して、リンティングに新しいステージを 2 つ追加し、Bicep コードを検証する。
- パイプラインを実行する。
- パイプラインによって検出された問題を修正します。
パイプラインを更新してステージを準備する
まず、パイプライン ファイルを更新してステージを定義する必要があります。 Azure Pipelines によって自動的に 1 つのステージが作成されますが、後でステージを追加するので、ステージを明示的に定義するためにパイプラインを更新する必要があります。
Visual Studio Code で、deploy フォルダー内の azure-pipelines.yml ファイルを開きます。
ファイル内の 14 行目からファイルの末尾までをすべて削除します。
jobs:
行も確実に削除してください。ファイルの下部に次のコードを追加します。
stages: - stage: Deploy jobs: - job: Deploy steps: - task: AzureResourceManagerTemplateDeployment@3 name: Deploy displayName: Deploy to Azure inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(DeploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
ヒント
YAML ファイルは、インデントによって区別されます。 このコードを入力する場合でも貼り付ける場合でも、インデントが正しいことを確認してください。 次のセクションでは、ファイルが一致することを確認できるように、完全な YAML パイプライン定義を確認します。
リンティングと検証ステージをパイプラインに追加する
stages:
行の下にリント ステージを追加します。- stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file deploy/main.bicep name: LintBicepCode displayName: Run Bicep linter
このステージでは、
az bicep build
コマンドを実行して Bicep ファイルをリンティングする単一ステップを定義します。追加した行の下に、検証ステージを追加します。
- 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)
このステージでは、プレフライト検証を実行する単一ステップを定義します。 プレフライト検証プロセスで Azure との通信が必要になるため、このステップにはサービス接続への参照が含まれています。
パイプライン定義には 3 つのステージがあります。 1 つ目は Bicep ファイルでリンターを実行し、2 つ目はプレフライト検証を実行し、3 つ目は Azure へのデプロイを実行します。
ファイルを保存します。
リンターを構成する
既定では、ファイルに問題が検出されると、Bicep リンターによって警告が表示されます。 Azure Pipelines では、リンターの警告をパイプラインを停止する必要がある問題として扱いません。 この動作をカスタマイズするには、リンターを再構成する bicepconfig.json ファイルを作成します。
deploy フォルダーに新しいファイルを追加し、bicepconfig.jsonという名前を付けます。
このファイルに次のコードをコピーします。
{ "analyzers": { "core": { "enabled": true, "verbose": true, "rules": { "adminusername-should-not-be-literal": { "level": "error" }, "max-outputs": { "level": "error" }, "max-params": { "level": "error" }, "max-resources": { "level": "error" }, "max-variables": { "level": "error" }, "no-hardcoded-env-urls": { "level": "error" }, "no-unnecessary-dependson": { "level": "error" }, "no-unused-params": { "level": "error" }, "no-unused-vars": { "level": "error" }, "outputs-should-not-contain-secrets": { "level": "error" }, "prefer-interpolation": { "level": "error" }, "secure-parameter-default": { "level": "error" }, "simplify-interpolation": { "level": "error" }, "protect-commandtoexecute-secrets": { "level": "error" }, "use-stable-vm-image": { "level": "error" } } } } }
ファイルを保存します。
パイプライン定義を確認してコミットする
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: Deploy jobs: - job: Deploy steps: - task: AzureResourceManagerTemplateDeployment@3 name: Deploy displayName: Deploy to Azure 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 lint and validation stages" git push
プッシュした直後に、Azure Pipelines で新しいパイプライン実行が開始されます。
パイプライン実行を表示する
ブラウザーで、[Pipelines] に移動します。
パイプラインの最新の実行を選択します。
パイプラインがまだ実行中の場合は、完了するまで待機します。 Azure Pipelines によってページが最新の状態で自動的に更新されますが、ページを随時更新することをお勧めします。
パイプライン実行では、YAML ファイルで定義した 3 つのステージが示されています。 リンティング ステージが失敗していることにも注目してください。
リンティング ステージを選択して詳細を表示します。
[Bicep リンターの実行] ステップを選択して、パイプライン ログを表示します。
次のようなエラーが表示されます。
エラー no-unused-params: パラメーター "storageAccountNameParam" が宣言されていますが使用されていません。
このエラーは、リンターによって Bicep ファイルの規則違反が検出されたことを示します。
リンター エラーを修正する
これで問題が特定されたので、Bicep ファイルで修正できます。
Visual Studio Code で、deploy フォルダーの main.bicep ファイルを開きます。
Bicep リンターによって、
storageAccountNameParam
パラメーターが使用されていないことも検出されたことがわかります。 Visual Studio Code では、未使用のパラメーターが波線で示されます。 通常、この行は警告を示す黄色になります。 しかし、bicepconfig.json ファイルをカスタマイズしたため、リンターはコードをエラーとして扱い、行は赤で表示されます。param storageAccountNameParam string = uniqueString(resourceGroup().id)
storageAccountNameParam
パラメーターを削除します。ファイルを保存します。
Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。
git add . git commit -m "Remove unused parameter" git push
この場合も、Azure Pipelines によって、パイプラインの新しい実行が自動的にトリガーされます。
パイプライン実行を再度表示する
ブラウザーでパイプラインに移動します。
最新の実行を選択します。
パイプライン実行が完了するまで待ちます。 Azure Pipelines によってページが最新の状態で自動的に更新されますが、ページを随時更新することをお勧めします。
リント ステージは正常に終了しましたが、検証ステージは失敗したことがわかります。
検証ステージを選択して詳細を表示します。
[プレフライト検証の実行] ステップを選択してパイプライン ログを表示します。
ログに表示されるエラーに、次のメッセージが含まれていることがわかります。
mystorageresourceNameSuffix は有効なストレージ アカウント名ではありません。 ストレージ アカウント名は、長さが 3 文字から 24 文字で、数字と小文字だけを使用できます。
このエラーは、ストレージ アカウント名が有効でないことを示します。
検証エラーを修正する
Bicep ファイルに別の問題を見つけました。 ここで、その問題を修正します。
Visual Studio Code で、deploy フォルダーの main.bicep ファイルを開きます。
storageAccountName
変数の定義をご覧ください。var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var applicationInsightsName = 'toywebsite' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var storageAccountName = 'mystorageresourceNameSuffix'
入力ミスがあり、文字列補間が正しく構成されていません。
文字列補間が正しく使用されるように、次のようにして
storageAccountName
変数を更新します。var storageAccountName = 'mystorage${resourceNameSuffix}'
ファイルを保存します。
Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。
git add . git commit -m "Fix string interpolation" git push
成功したパイプライン実行を表示する
ブラウザーでパイプラインに移動します。
最新の実行を選択します。
パイプライン実行が完了するまで待ちます。 Azure Pipelines によってページが最新の状態で自動的に更新されますが、ページを随時更新することをお勧めします。
パイプラインの 3 つのステージがすべて正常に終了しています。
これで、デプロイ プロセスの早い段階で Bicep コード内のエラーを正常に検出し、エラーがない場合は Azure にデプロイするパイプラインが完成しました。