Övning – Lägga till lint- och valideringssteg i din pipeline
Du har pratat med ditt team och har bestämt dig för att automatisera distributionerna ytterligare med hjälp av en pipeline. Du vill skapa mer förtroende för det du distribuerar.
I den här övningen lägger du till valideringssteg i pipelinen. Sedan kör du linter- och preflight-valideringen före varje distribution.
Under processen gör du följande:
- Uppdatera din befintliga pipeline för att lägga till två nya steg för att lint och verifiera din Bicep-kod.
- Kör din pipeline.
- Åtgärda eventuella problem som din pipeline identifierar.
Uppdatera din pipeline för att förbereda för faser
Först måste du uppdatera pipelinefilen för att definiera en fas. Azure Pipelines skapar automatiskt en enda fas åt dig, men eftersom du kommer att lägga till fler steg snart måste du uppdatera din pipeline för att explicit definiera faser.
I Visual Studio Code öppnar du filen azure-pipelines.yml i distributionsmappen.
Ta bort allt i filen från rad 14 till slutet av filen. Se även till att ta bort
jobs:
raden.Lägg till följande kod längst ned i filen:
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)
Dricks
YAML-filer är känsliga för indrag. Oavsett om du skriver eller klistrar in den här koden kontrollerar du att indraget är korrekt. I nästa avsnitt visas den fullständiga YAML-pipelinedefinitionen så att du kan kontrollera att filen matchar.
Lägga till lint- och valideringssteg i pipelinen
stages:
Lägg till ett lintsteg under raden:- stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file deploy/main.bicep name: LintBicepCode displayName: Run Bicep linter
I det här steget definieras ett enda steg som kör
az bicep build
kommandot för att linta Bicep-filen.Lägg till ett valideringssteg under de rader som du precis har lagt till:
- 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)
I den här fasen definieras ett enda steg som kör preflight-valideringen. Observera att det här steget innehåller en referens till tjänstanslutningen, eftersom valideringsprocessen för förhandsprogrammet kräver kommunikation med Azure.
Pipelinedefinitionen har nu tre steg. Den första kör lintern på din Bicep-fil, den andra utför en preflight-validering och den tredje utför distributionen till Azure.
Spara filen.
Konfigurera lintern
Som standard ger Bicep-lintern en varning när den identifierar ett problem med filen. Azure Pipelines behandlar inte lintervarningar som problem som bör stoppa din pipeline. Om du vill anpassa det här beteendet skapar du en bicepconfig.json fil som konfigurerar om lintern.
Lägg till en ny fil i distributionsmappen och ge den namnet bicepconfig.json.
Kopiera följande kod till filen:
{ "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" } } } } }
Spara filen.
Verifiera och checka in din pipelinedefinition
Kontrollera att filen azure-pipelines.yml ser ut som följande fil:
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)
Om den inte gör det uppdaterar du den så att den matchar det här exemplet och sparar det sedan.
Checka in och skicka ändringarna till Git-lagringsplatsen genom att köra följande kommandon i Visual Studio Code-terminalen:
git add . git commit -m "Add lint and validation stages" git push
Omedelbart efter att du har push-överförts startar Azure Pipelines en ny pipelinekörning.
Visa pipelinekörningen
Gå till Pipelines i webbläsaren.
Välj den senaste körningen av din pipeline.
Om pipelinen fortfarande körs väntar du tills den är klar. Även om Azure Pipelines automatiskt uppdaterar sidan med den senaste statusen är det en bra idé att uppdatera sidan ibland.
Observera att pipelinekörningen nu visar de tre faser som du definierade i YAML-filen. Observera också att Lint-fasen har misslyckats.
Välj Lint-fasen för att se dess information.
Välj steget Kör Bicep-linter för att visa pipelineloggen.
Observera att felet som visas liknar följande:
Fel no-unused-params: Parametern "storageAccountNameParam" deklareras men används aldrig.
Det här felet anger att lintern hittade en regelöverträdelse i Bicep-filen.
Åtgärda linterfelet
Nu när du har identifierat problemet kan du åtgärda det i Bicep-filen.
Öppna filen main.bicep i mappen deploy i Visual Studio Code.
Observera att Bicep-lintern också har upptäckt att parametern
storageAccountNameParam
inte används. Visual Studio Code anger den oanvända parametern med en vågig rad. Normalt skulle linjen vara gul för att indikera en varning. Men eftersom du har anpassat bicepconfig.json-filen behandlar lintern koden som ett fel och visar raden i rött.param storageAccountNameParam string = uniqueString(resourceGroup().id)
Ta bort parametern
storageAccountNameParam
.Spara filen.
Checka in och skicka ändringarna till Git-lagringsplatsen genom att köra följande kommandon i Visual Studio Code-terminalen:
git add . git commit -m "Remove unused parameter" git push
Återigen utlöser Azure Pipelines automatiskt en ny körning av din pipeline.
Visa pipelinekörningen igen
Gå till din pipeline i webbläsaren.
Välj den senaste körningen.
Vänta tills pipelinekörningen är klar. Även om Azure Pipelines automatiskt uppdaterar sidan med den senaste statusen är det en bra idé att uppdatera sidan ibland.
Observera att Lint-fasen har slutförts, men nu har valideringssteget misslyckats.
Välj fasen Validera för att se dess information.
Välj steget Kör preflight-validering för att visa pipelineloggen.
Observera att felet som visas i loggen innehåller följande meddelande:
mystorageresourceNameSuffix är inte ett giltigt lagringskontonamn. Lagringskontots namn måste vara mellan 3 och 24 tecken långt och endast använda siffror och gemener.
Det här felet anger att lagringskontonamnet inte är giltigt.
Åtgärda verifieringsfelet
Du har hittat ett annat problem i Bicep-filen. Här löser du problemet.
Öppna filen main.bicep i mappen deploy i Visual Studio Code.
Titta på definitionen av variabeln
storageAccountName
:var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var applicationInsightsName = 'toywebsite' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var storageAccountName = 'mystorageresourceNameSuffix'
Det verkar finnas ett stavfel och stränginterpolationen har inte konfigurerats korrekt.
Uppdatera variabeln
storageAccountName
så att stränginterpolation används korrekt:var storageAccountName = 'mystorage${resourceNameSuffix}'
Spara filen.
Checka in och skicka ändringarna till Git-lagringsplatsen genom att köra följande kommandon i Visual Studio Code-terminalen:
git add . git commit -m "Fix string interpolation" git push
Visa lyckad pipelinekörning
Gå till din pipeline i webbläsaren.
Välj den senaste körningen.
Vänta tills pipelinekörningen är klar. Även om Azure Pipelines automatiskt uppdaterar sidan med den senaste statusen är det en bra idé att uppdatera sidan ibland.
Observera att alla tre stegen i pipelinen har slutförts:
Nu har du en pipeline som identifierar fel i Bicep-koden tidigt i distributionsprocessen och sedan distribueras till Azure om det inte finns några fel.