Übung: Hinzufügen von Lint- und Validierungsphasen zu Ihrer Pipeline

Abgeschlossen

Sie haben mit Ihrem Team gesprochen und entschieden, dass Sie Ihre Bereitstellungen mithilfe einer Pipeline weiter automatisieren werden. Sie möchten mehr Vertrauen in die Bereitstellung schaffen.

In dieser Übung fügen Sie Ihrer Pipeline Überprüfungsphasen hinzu. Anschließend führen Sie die Linter- und Preflightüberprüfung vor jeder Bereitstellung aus.

In dem Prozess gehen Sie wie folgt vor:

  • Aktualisieren Sie Ihre vorhandene Pipeline, um Lint zwei neue Phasen hinzuzufügen und Ihren Bicep-Code zu überprüfen.
  • Führen Sie Ihre Pipeline aus.
  • Beheben Sie alle Probleme, die Ihre Pipeline erkennt.

Aktualisieren Ihrer Pipeline zur Vorbereitung auf Phasen

Zunächst müssen Sie Ihre Pipelinedatei aktualisieren, um eine Phase zu definieren. Azure Pipelines erstellt automatisch eine Phase für Sie, aber da Sie in Kürze weitere Phasen hinzufügen werden, müssen Sie Ihre Pipeline aktualisieren, um Phasen explizit zu definieren.

  1. Öffnen Sie in Visual Studio Code die Datei azure-pipelines.yml im Ordner deploy.

  2. Entfernen Sie alle Inhalte der Datei von Zeile 14 bis zum Ende der Datei. Entfernen Sie auch die Zeile jobs:.

  3. Fügen Sie am Ende der Datei den folgenden Code ein:

    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)
    

    Tipp

    YAML-Dateien berücksichtigen Einzüge. Unabhängig davon, ob Sie diesen Code eingeben oder einfügen, stellen Sie sicher, dass der Einzug korrekt ist. Im nächsten Abschnitt sehen Sie die vollständige YAML-Pipelinedefinition, damit Sie überprüfen können, ob Ihre Datei übereinstimmt.

Hinzufügen von Lint- und Validierungsphasen zu Ihrer Pipeline

  1. Fügen Sie unterhalb der Zeile stages: eine Lintingphase hinzu:

    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file deploy/main.bicep
            name: LintBicepCode
            displayName: Run Bicep linter
    

    In dieser Phase wird ein einzelner Schritt definiert, in dem der az bicep build-Befehl zum Linting der Bicep-Datei ausgeführt wird.

  2. Fügen Sie unterhalb der soeben hinzugefügten Zeilen eine Überprüfungsphase hinzu:

    - 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)
    

    Diese Stage definiert einen einzelnen Schritt, der die Preflightvalidierung ausführt. Beachten Sie, dass dieser Schritt einen Verweis auf Ihre Dienstverbindung enthält, da für den Preflight-Überprüfungsprozess eine Kommunikation mit Azure erforderlich ist.

    Ihre Pipelinedefinition enthält jetzt drei Phasen. Der erste führt den Linter für Ihre Bicep-Datei aus, der zweite eine Preflightvalidierung und der dritte die Bereitstellung in Azure.

  3. Speichern Sie die Datei .

Konfigurieren des Linters

Standardmäßig gibt der Bicep-Linter eine Warnung aus, wenn ein Problem mit Ihrer Datei erkannt wird. Azure Pipelines behandelt Linterwarnungen nicht als Probleme, die Ihre Pipeline beenden sollten. Erstellen Sie eine bicepconfig.json-Datei, die den Linter neu konfiguriert, um dieses Verhalten anzupassen.

  1. Fügen Sie im Ordner deploy eine neue Datei hinzu, und nennen Sie sie bicepconfig.json.

    Screenshot: Visual Studio Code-Explorer mit neuer Datei im Ordner „deploy“

  2. Kopieren Sie den folgenden Code in die Datei:

    {
      "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"
            }
          }
        }
      }
    }
    
  3. Speichern Sie die Datei .

Überprüfen und Committen Ihrer Pipelinedefinition

  1. Vergewissern Sie sich, dass die Datei azure-pipelines.yml wie die folgende Datei aussieht:

    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)
    

    Falls nicht, aktualisieren Sie sie entsprechend diesem Beispiel, und speichern Sie sie.

  2. Committen und pushen Sie Ihre Änderungen in Ihr Git-Repository, indem Sie die folgenden Befehle im Visual Studio Code-Terminal ausführen:

    git add .
    git commit -m "Add lint and validation stages"
    git push
    

    Unmittelbar nach dem Pushen startet Azure Pipelines eine neue Pipelineausführung.

Anzeigen der Pipelineausführung

  1. Wechseln Sie in Ihrem Browser zu Pipelines.

  2. Wählen Sie die letzte Ausführung Ihrer Pipeline aus.

    Screenshot: Azure DevOps mit hervorgehobenem Link zur letzten Pipelineausführung

    Wenn die Pipeline noch ausgeführt wird, warten Sie, bis sie abgeschlossen ist. Obwohl Azure Pipelines die Seite automatisch mit dem aktuellen Status aktualisiert, sollten Sie die Seite gelegentlich auch manuell aktualisieren.

  3. Beachten Sie, dass die Pipelineversion nun die drei Phasen anzeigt, die Sie in der YAML-Datei definiert haben. Wie Sie sehen, ist die Phase Lint fehlgeschlagen.

    Screenshot: Pipelineausführung in Azure DevOps mit Fehler in der Lint-Phase

  4. Wählen Sie die Lint-Phase aus, um die zugehörigen Details anzuzeigen.

    Screenshot: Pipelineausführung in Azure DevOps mit hervorgehobenem Namen der Lint-Phase

  5. Wählen Sie den Schritt Bicep-Linter ausführen aus, um das Pipelineprotokoll anzuzeigen.

    Screenshot: Pipelineprotokoll für die Lint-Phase mit hervorgehobenem Schritt für die Ausführung eines Bicep-Linters

    Die Fehlermeldung sieht in etwa wie folgt aus:

    Fehler no-unused-params: Der Parameter „storageAccountNameParam“ wird deklariert, aber nie verwendet.

    Dieser Fehler gibt an, dass der Linter einen Regelverstoß in Ihrer Bicep-Datei gefunden hat.

Beheben des Linter-Fehlers

Nachdem Sie das Problem erkannt haben, können Sie es in Ihrer Bicep-Datei beheben.

  1. Öffnen Sie in Visual Studio Code die Datei main.bicep im Ordner deploy.

  2. Beachten Sie, dass der Bicep-Linter auch erkannt hat, dass der storageAccountNameParam-Parameter nicht verwendet wird. Visual Studio Code gibt den nicht verwendeten Parameter durch eine Wellenlinie an. Normalerweise wäre die Linie für Warnungen gelb. Da Sie die Datei bicepconfig.json jedoch konfiguriert haben, behandelt der Linter den Code als Fehler und erzeugt eine rote Linie.

    param storageAccountNameParam string = uniqueString(resourceGroup().id)
    
  3. Löschen Sie den storageAccountNameParam-Parameter.

  4. Speichern Sie die Datei .

  5. Committen und pushen Sie Ihre Änderungen in Ihr Git-Repository, indem Sie die folgenden Befehle im Visual Studio Code-Terminal ausführen:

    git add .
    git commit -m "Remove unused parameter"
    git push
    

    Auch hier löst Azure Pipelines automatisch eine neue Ausführung Ihrer Pipeline aus.

Anzeigen der erneuten Pipelineausführung

  1. Wechseln Sie in Ihrem Browser zu Ihrer Pipeline.

  2. Wählen Sie die letzte Ausführung aus.

    Warten Sie, bis die Pipelineausführung abgeschlossen ist. Obwohl Azure Pipelines die Seite automatisch mit dem aktuellen Status aktualisiert, sollten Sie die Seite gelegentlich auch manuell aktualisieren.

  3. Die Lint-Phase wurde erfolgreich abgeschlossen, doch jetzt ist bei der Validate-Phase ein Fehler aufgetreten.

    Screenshot: Pipelineausführung mit Erfolgsmeldung für die Lint-Phase und Fehlermeldung für die Validate-Phase

  4. Wählen Sie die Validierungsphase aus, um die zugehörigen Details anzuzeigen.

  5. Wählen Sie den Schritt Preflightvalidierung ausführen aus, um das Pipelineprotokoll anzuzeigen.

    Screenshot: Pipelineprotokoll für die Validate-Phase mit hervorgehobenem Schritt für die Ausführung der Preflightüberprüfung

    Beachten Sie, dass der im Protokoll angezeigte Fehler die folgende Meldung enthält:

    mystorageresourceNameSuffix ist kein gültiger Speicherkontoname. Ein Speicherkontoname muss zwischen 3 und 24 Zeichen lang sein und darf ausschließlich Ziffern und Kleinbuchstaben enthalten.

    Dieser Fehler gibt an, dass der Name des Speicherkontos ungültig ist.

Beheben des Überprüfungsfehlers

Sie haben ein weiteres Problem in der Bicep-Datei gefunden. Hier beheben Sie das Problem.

  1. Öffnen Sie in Visual Studio Code die Datei main.bicep im Ordner deploy.

  2. Sehen Sie sich die Definition der storageAccountName-Variablen an:

    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website'
    var applicationInsightsName = 'toywebsite'
    var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}'
    var storageAccountName = 'mystorageresourceNameSuffix'
    

    Es scheint ein Tippfehler vorzuliegen, und die Zeichenfolgeninterpolation wurde nicht ordnungsgemäß konfiguriert.

  3. Aktualisieren Sie die storageAccountName-Variable, um die Zeichenfolgeninterpolation ordnungsgemäß zu verwenden:

    var storageAccountName = 'mystorage${resourceNameSuffix}'
    
  4. Speichern Sie die Datei .

  5. Committen und pushen Sie Ihre Änderungen in Ihr Git-Repository, indem Sie die folgenden Befehle im Visual Studio Code-Terminal ausführen:

    git add .
    git commit -m "Fix string interpolation"
    git push
    

Ansehen der erfolgreichen Pipelineausführung

  1. Wechseln Sie in Ihrem Browser zu Ihrer Pipeline.

  2. Wählen Sie die letzte Ausführung aus.

    Warten Sie, bis die Pipelineausführung abgeschlossen ist. Obwohl Azure Pipelines die Seite automatisch mit dem aktuellen Status aktualisiert, sollten Sie die Seite gelegentlich auch manuell aktualisieren.

  3. Alle drei Phasen der Pipeline wurden erfolgreich abgeschlossen:

    Screenshot: Pipelineausführung in Azure DevOps mit Erfolgsmeldungen in allen drei Phasen

Sie verfügen nun über eine Pipeline, die Fehler in Ihrem Bicep-Code frühzeitig im Bereitstellungsprozess erkennt und dann in Azure bereitstellt, wenn keine Fehler auftreten.