Övning – Lägga till lint- och valideringssteg i din pipeline

Slutförd

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.

  1. I Visual Studio Code öppnar du filen azure-pipelines.yml i distributionsmappen.

  2. Ta bort allt i filen från rad 14 till slutet av filen. Se även till att ta bort jobs: raden.

  3. 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

  1. 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.

  2. 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.

  3. 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.

  1. Lägg till en ny fil i distributionsmappen och ge den namnet bicepconfig.json.

    Skärmbild av Visual Studio Code Explorer med den nya filen som visas i distributionsmappen.

  2. 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"
            }
          }
        }
      }
    }
    
  3. Spara filen.

Verifiera och checka in din pipelinedefinition

  1. 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.

  2. 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

  1. Gå till Pipelines i webbläsaren.

  2. Välj den senaste körningen av din pipeline.

    Skärmbild av Azure DevOps med länken till den senaste pipelinekörningen markerad.

    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.

  3. Observera att pipelinekörningen nu visar de tre faser som du definierade i YAML-filen. Observera också att Lint-fasen har misslyckats.

    Skärmbild av en pipelinekörning i Azure DevOps med lint-fasens rapporteringsfel.

  4. Välj Lint-fasen för att se dess information.

    Skärmbild av en pipelinekörning i Azure DevOps med namnet på Lint-fasen markerat.

  5. Välj steget Kör Bicep-linter för att visa pipelineloggen.

    Skärmbild av pipelineloggen för Lint-fasen med steget för att köra en Bicep-linter markerad.

    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.

  1. Öppna filen main.bicep i mappen deploy i Visual Studio Code.

  2. 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)
    
  3. Ta bort parametern storageAccountNameParam .

  4. Spara filen.

  5. 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

  1. Gå till din pipeline i webbläsaren.

  2. 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.

  3. Observera att Lint-fasen har slutförts, men nu har valideringssteget misslyckats.

    Skärmbild av pipelinekörningen, där Lint-fasen rapporterar lyckat och verifieringsstegsrapporteringsfelet.

  4. Välj fasen Validera för att se dess information.

  5. Välj steget Kör preflight-validering för att visa pipelineloggen.

    Skärmbild av pipelineloggen för valideringssteget, där steget för att köra förhandsvalidering är markerat.

    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.

  1. Öppna filen main.bicep i mappen deploy i Visual Studio Code.

  2. 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.

  3. Uppdatera variabeln storageAccountName så att stränginterpolation används korrekt:

    var storageAccountName = 'mystorage${resourceNameSuffix}'
    
  4. Spara filen.

  5. 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

  1. Gå till din pipeline i webbläsaren.

  2. 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.

  3. Observera att alla tre stegen i pipelinen har slutförts:

    Skärmbild av pipelinekörningen i Azure DevOps, där alla tre stegen rapporterar framgång.

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.