Øvelse – Føj lint og valider faser til din pipeline

Fuldført

Du har talt med dit team og har besluttet at automatisere dine udrulninger yderligere ved hjælp af en pipeline. Du vil skabe større tillid til det, du udruller.

I denne øvelse skal du føje valideringsfaser til din pipeline. Du skal derefter køre valideringen af linter og forhåndskontrol før hver udrulning.

Under processen skal du:

  • Opdater din eksisterende pipeline for at føje to nye faser til lint, og valider din Bicep-kode.
  • Kør din pipeline.
  • Løs eventuelle problemer, som din pipeline registrerer.

Opdater din pipeline for at forberede dig på faser

Først skal du opdatere pipelinefilen for at definere en fase. Azure Pipelines opretter automatisk en enkelt fase for dig, men da du snart tilføjer flere faser, skal du opdatere din pipeline for eksplicit at definere faser.

  1. I Visual Studio Code skal du åbne filen azure-pipelines.yml i mappen installere.

  2. Fjern alt i filen fra linje 14 til bunden af filen. Sørg også for at fjerne jobs: linje.

  3. Tilføj følgende kode nederst 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)
    

    Drikkepenge

    YAML-filer er følsomme for indrykning. Uanset om du skriver eller indsætter denne kode, skal du sørge for, at indrykningen er korrekt. I næste afsnit kan du se den komplette YAML-pipelinedefinition, så du kan kontrollere, at filen stemmer overens.

Føj lint- og valideringsfaser til din pipeline

  1. Under stages:-linjen skal du tilføje en lintfase:

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

    Denne fase definerer et enkelt trin, der kører kommandoen az bicep build for at linte Bicep-filen.

  2. Under de linjer, du lige har tilføjet, skal du tilføje en valideringsfase:

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

    Denne fase definerer et enkelt trin, der kører forhåndskontrollen. Bemærk, at dette trin indeholder en reference til din tjenesteforbindelse, fordi valideringsprocessen for forhåndskontrol kræver kommunikation med Azure.

    Din pipelinedefinition har nu tre faser. Den første kører linter på din Bicep-fil, den anden udfører en forhåndsgodkendelse, og den tredje udfører udrulningen på Azure.

  3. Gem filen.

Konfigurer linteren

Bicep linter viser som standard en advarsel, når der registreres et problem med filen. Azure Pipelines behandler ikke linter-advarsler som problemer, der skal stoppe din pipeline. Hvis du vil tilpasse denne funktionsmåde, skal du oprette en bicepconfig.json fil, der omkonfigurerer linteren.

  1. Tilføj en ny fil i mappen installer , og navngiv den bicepconfig.json.

    Skærmbillede af Visual Studio Code Explorer, hvor den nye fil vises i installationsmappen.

  2. Kopiér følgende kode til 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. Gem filen.

Bekræft og bekræft din pipelinedefinition

  1. Kontrollér, at din azure-pipelines.yml-fil ligner følgende 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)
    

    Hvis den ikke gør det, skal du opdatere den, så den stemmer overens med dette eksempel, og derefter gemme den.

  2. Bekræft og send dine ændringer til Git-lageret ved at køre følgende kommandoer i Visual Studio Code-terminalen:

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

    Umiddelbart efter du har pushet, starter Azure Pipelines en ny pipelinekørsel.

Få vist pipelinekørslen

  1. Gå til Pipelinesi din browser.

  2. Vælg den seneste kørsel af pipelinen.

    Skærmbillede af Azure DevOps, hvor linket til den seneste pipelinekørsel er fremhævet.

    Hvis pipelinen stadig kører, skal du vente, indtil den er færdig. Selvom Azure Pipelines automatisk opdaterer siden med den seneste status, er det en god idé at opdatere siden lejlighedsvist.

  3. Bemærk, at pipelinekørslen nu viser de tre faser, du har defineret i YAML-filen. Bemærk også, at fasen med lint mislykkedes.

    Skærmbillede af en pipeline, der kører i Azure DevOps, med rapporteringsfejl i Lint-fase.

  4. Vælg fasen Lint for at få vist detaljerne.

    Skærmbillede af en pipeline, der kører i Azure DevOps, hvor navnet på fasen Lint er fremhævet.

  5. Vælg trinnet Kør Bicep linter for at få vist pipelineloggen.

    Skærmbillede af pipelineloggen for fasen Lint, hvor trinnet til kørsel af en Bicep linter er fremhævet.

    Bemærk, at den viste fejl ligner følgende:

    Fejl no-unused-params: Parameteren "storageAccountNameParam" er erklæret, men bruges aldrig.

    Denne fejl angiver, at linteren fandt en regelovertrædelse i din Bicep-fil.

Ret linter-fejlen

Nu, hvor du har identificeret problemet, kan du løse det i din Bicep-fil.

  1. Åbn filen main.bicep i mappen installér i Visual Studio Code.

  2. Bemærk, at Bicep linter også har registreret, at parameteren storageAccountNameParam ikke bruges. Visual Studio Code angiver den ubrugte parameter med en bølgestreg. Normalt vil linjen være gul for at angive en advarsel. Men da du har tilpasset bicepconfig.json-filen, behandler linter koden som en fejl og viser linjen med rødt.

    param storageAccountNameParam string = uniqueString(resourceGroup().id)
    
  3. Slet parameteren storageAccountNameParam.

  4. Gem filen.

  5. Bekræft og send dine ændringer til Git-lageret ved at køre følgende kommandoer i Visual Studio Code-terminalen:

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

    Azure Pipelines udløser igen automatisk en ny kørsel af din pipeline.

Vis pipelinekørslen igen

  1. I din browser skal du gå til din pipeline.

  2. Vælg den seneste kørsel.

    Vent, indtil pipelinekørslen er fuldført. Selvom Azure Pipelines automatisk opdaterer siden med den seneste status, er det en god idé at opdatere siden lejlighedsvist.

  3. Bemærk, at Lint-fasen blev fuldført, men fasen Valider mislykkedes.

    Skærmbillede af pipelinekørslen, hvor rapporteringen af Lint-fase lykkedes og fejlen Valider faserapportering.

  4. Vælg fasen Valider for at få vist detaljerne.

  5. Vælg trinnet Kør forhåndsbelysning for at få vist pipelineloggen.

    Skærmbillede af pipelineloggen for fasen Valider, hvor trinnet til kørsel af forhåndskontrollen er fremhævet.

    Bemærk, at den fejl, der vises i logfilen, indeholder følgende meddelelse:

    mystorageresourceNameSuffix er ikke et gyldigt lagerkontonavn. Lagerkontonavnet skal være mellem 3 og 24 tegn langt og kun bruge tal og små bogstaver.

    Denne fejl angiver, at navnet på lagerkontoen ikke er gyldigt.

Ret valideringsfejlen

Du har fundet et andet problem i Bicep-filen. Her kan du løse problemet.

  1. Åbn filen main.bicep i mappen installér i Visual Studio Code.

  2. Se definitionen af variablen storageAccountName:

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

    Der ser ud til at være en tastefejl, og strenginterpolering er ikke konfigureret korrekt.

  3. Opdater variablen storageAccountName for at bruge strenginterpolering korrekt:

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

  5. Bekræft og send dine ændringer til Git-lageret ved at køre følgende kommandoer i Visual Studio Code-terminalen:

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

Få vist den vellykkede pipelinekørsel

  1. I din browser skal du gå til din pipeline.

  2. Vælg den seneste kørsel.

    Vent, indtil pipelinekørslen er fuldført. Selvom Azure Pipelines automatisk opdaterer siden med den seneste status, er det en god idé at opdatere siden lejlighedsvist.

  3. Bemærk, at alle tre faser i pipelinen er fuldført:

    Skærmbillede af pipelinen, der kører i Azure DevOps, hvor alle tre faser rapporterer om succes.

Du har nu en pipeline, der registrerer fejl i din Bicep-kode tidligt i installationsprocessen og derefter udruller til Azure, hvis der ikke er nogen fejl.