Übung: Hinzufügen von Lint- und Validierungsphasen zu Ihrer Pipeline
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.
Öffnen Sie in Visual Studio Code die Datei azure-pipelines.yml im Ordner deploy.
Entfernen Sie alle Inhalte der Datei von Zeile 14 bis zum Ende der Datei. Entfernen Sie auch die Zeile
jobs:
.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
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.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.
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.
Fügen Sie im Ordner deploy eine neue Datei hinzu, und nennen Sie sie bicepconfig.json.
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" } } } } }
Speichern Sie die Datei .
Überprüfen und Committen Ihrer Pipelinedefinition
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.
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
Wechseln Sie in Ihrem Browser zu Pipelines.
Wählen Sie die letzte Ausführung Ihrer Pipeline aus.
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.
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.
Wählen Sie die Lint-Phase aus, um die zugehörigen Details anzuzeigen.
Wählen Sie den Schritt Bicep-Linter ausführen aus, um das Pipelineprotokoll anzuzeigen.
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.
Öffnen Sie in Visual Studio Code die Datei main.bicep im Ordner deploy.
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)
Löschen Sie den
storageAccountNameParam
-Parameter.Speichern Sie die Datei .
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
Wechseln Sie in Ihrem Browser zu Ihrer Pipeline.
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.
Die Lint-Phase wurde erfolgreich abgeschlossen, doch jetzt ist bei der Validate-Phase ein Fehler aufgetreten.
Wählen Sie die Validierungsphase aus, um die zugehörigen Details anzuzeigen.
Wählen Sie den Schritt Preflightvalidierung ausführen aus, um das Pipelineprotokoll anzuzeigen.
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.
Öffnen Sie in Visual Studio Code die Datei main.bicep im Ordner deploy.
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.
Aktualisieren Sie die
storageAccountName
-Variable, um die Zeichenfolgeninterpolation ordnungsgemäß zu verwenden:var storageAccountName = 'mystorage${resourceNameSuffix}'
Speichern Sie die Datei .
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
Wechseln Sie in Ihrem Browser zu Ihrer Pipeline.
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.
Alle drei Phasen der Pipeline wurden erfolgreich abgeschlossen:
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.