Oefening: lint toevoegen en fasen valideren aan uw pijplijn

Voltooid

U hebt met uw team gesproken en besloten om uw implementaties verder te automatiseren met behulp van een pijplijn. U wilt meer vertrouwen opbouwen in wat u implementeert.

In deze oefening voegt u validatiefasen toe aan uw pijplijn. Vervolgens voert u de linter en de preflight-validatie uit voor elke implementatie.

Tijdens het proces gaat u het volgende doen:

  • Werk uw bestaande pijplijn bij om twee nieuwe fasen toe te voegen aan lint en uw Bicep-code te valideren.
  • Voer uw pipeline uit.
  • Los eventuele problemen op die door uw pijplijn worden gedetecteerd.

Uw pijplijn bijwerken om u voor te bereiden op fasen

Eerst moet u uw pijplijnbestand bijwerken om een fase te definiëren. Azure Pipelines maakt automatisch één fase voor u, maar omdat u binnenkort meer fasen toevoegt, moet u uw pijplijn bijwerken om fasen expliciet te definiëren.

  1. Open in Visual Studio Code het azure-pipelines.yml-bestand in de implementatiemap .

  2. Verwijder alles in het bestand van regel 14 tot onderaan het bestand. Zorg ervoor dat u ook de jobs: regel verwijdert.

  3. Voeg onder aan het bestand de volgende code toe:

    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)
    

    Tip

    YAML-bestanden zijn gevoelig voor inspringing. Controleer of de inspringing juist is, ongeacht of u deze code typt of plakt. In de volgende sectie ziet u de volledige YAML-pijplijndefinitie, zodat u kunt controleren of het bestand overeenkomt.

Lint- en validatiefasen toevoegen aan uw pijplijn

  1. Voeg onder de stages: regel een lintfase toe:

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

    In deze fase wordt één stap gedefinieerd waarmee de az bicep build opdracht wordt uitgevoerd om het Bicep-bestand te linten.

  2. Voeg onder de regels die u zojuist hebt toegevoegd een validatiefase toe:

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

    In deze fase wordt één stap gedefinieerd waarmee de preflight-validatie wordt uitgevoerd. U ziet dat deze stap een verwijzing naar uw serviceverbinding bevat, omdat voor het preflight-validatieproces communicatie met Azure is vereist.

    Uw pijplijndefinitie heeft nu drie fasen. De eerste voert de linter uit op uw Bicep-bestand, de tweede voert een voorbereidende validatie uit en de derde voert de implementatie uit naar Azure.

  3. Sla het bestand op.

De linter configureren

Bicep linter biedt standaard een waarschuwing wanneer er een probleem met uw bestand wordt gedetecteerd. Azure Pipelines behandelt linterwaarschuwingen niet als problemen die uw pijplijn moeten stoppen. Als u dit gedrag wilt aanpassen, maakt u een bicepconfig.json-bestand waarmee de linter opnieuw wordt geconfigureerd.

  1. Voeg een nieuw bestand toe aan de implementatiemap en geef het bicepconfig.json een naam.

    Schermopname van Visual Studio Code Explorer, met het nieuwe bestand dat wordt weergegeven in de implementatiemap.

  2. Kopieer de volgende code naar het bestand:

    {
      "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. Sla het bestand op.

Uw pijplijndefinitie controleren en doorvoeren

  1. Controleer of het azure-pipelines.yml-bestand er als volgt uitziet:

    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)
    

    Als dit niet het probleem is, werkt u deze bij zodat deze overeenkomt met dit voorbeeld en slaat u het op.

  2. Voer uw wijzigingen door en push deze naar uw Git-opslagplaats door de volgende opdrachten uit te voeren in de Visual Studio Code-terminal:

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

    Direct nadat u een push hebt uitgevoerd, start Azure Pipelines een nieuwe pijplijnuitvoering.

De pijplijnuitvoering weergeven

  1. Ga in uw browser naar Pijplijnen.

  2. Selecteer de meest recente uitvoering van uw pijplijn.

    Schermopname van Azure DevOps met de koppeling naar de meest recente pijplijnuitvoering gemarkeerd.

    Als de pijplijn nog steeds wordt uitgevoerd, wacht u totdat deze is voltooid. Hoewel Azure Pipelines de pagina automatisch bijwerkt met de meest recente status, is het een goed idee om uw pagina af en toe te vernieuwen.

  3. U ziet dat de pijplijnuitvoering nu de drie fasen toont die u hebt gedefinieerd in het YAML-bestand. U ziet ook dat de lintfase is mislukt.

    Schermopname van een pijplijnuitvoering in Azure DevOps, met de lintfaserapportagefout.

  4. Selecteer de lintfase om de details ervan weer te geven.

    Schermopname van een pijplijnuitvoering in Azure DevOps, met de naam van de Lint-fase gemarkeerd.

  5. Selecteer de stap Bicep linter uitvoeren om het pijplijnlogboek weer te geven.

    Schermopname van het pijplijnlogboek voor de lintfase, met de stap voor het uitvoeren van een Bicep linter gemarkeerd.

    U ziet dat de weergegeven fout vergelijkbaar is met de volgende:

    Fout no-unused-params: Parameter "storageAccountNameParam" is gedeclareerd maar nooit gebruikt.

    Deze fout geeft aan dat de linter een regelschending heeft gevonden in uw Bicep-bestand.

De linter-fout oplossen

Nu u het probleem hebt geïdentificeerd, kunt u dit oplossen in uw Bicep-bestand.

  1. Open in Visual Studio Code het bestand main.bicep in de implementatiemap .

  2. U ziet dat bicep linter ook heeft gedetecteerd dat de storageAccountNameParam parameter niet wordt gebruikt. Visual Studio Code geeft de ongebruikte parameter aan met een golvende lijn. Normaal gesproken is de lijn geel om een waarschuwing aan te geven. Maar omdat u het bicepconfig.json-bestand hebt aangepast, behandelt de linter de code als een fout en wordt de regel rood weergegeven.

    param storageAccountNameParam string = uniqueString(resourceGroup().id)
    
  3. Verwijder de storageAccountNameParam parameter.

  4. Sla het bestand op.

  5. Voer uw wijzigingen door en push deze naar uw Git-opslagplaats door de volgende opdrachten uit te voeren in de Visual Studio Code-terminal:

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

    Opnieuw activeert Azure Pipelines automatisch een nieuwe uitvoering van uw pijplijn.

De pijplijnuitvoering opnieuw weergeven

  1. Ga in uw browser naar uw pijplijn.

  2. Selecteer de meest recente uitvoering.

    Wacht totdat de pijplijnuitvoering is voltooid. Hoewel Azure Pipelines de pagina automatisch bijwerkt met de meest recente status, is het een goed idee om uw pagina af en toe te vernieuwen.

  3. U ziet dat de lintfase is voltooid, maar nu de fase Valideren is mislukt.

    Schermopname van de pijplijnuitvoering, met het rapporteren van de Lint-fase en de fout in het valideren van faserapportage.

  4. Selecteer de fase Valideren om de details ervan weer te geven.

  5. Selecteer de stap voor de voorbereidende validatie uitvoeren om het pijplijnlogboek weer te geven.

    Schermopname van het pijplijnlogboek voor de fase Valideren, met de stap voor het uitvoeren van de preflight-validatie gemarkeerd.

    U ziet dat de fout die wordt weergegeven in het logboek het volgende bericht bevat:

    mystorageresourceNameSuffix is geen geldige naam van het opslagaccount. Een opslagaccountnaam moet tussen 3 en 24 tekens lang zijn en mag alleen bestaan uit getallen en kleine letters.

    Deze fout geeft aan dat de naam van het opslagaccount niet geldig is.

De validatiefout oplossen

U hebt een ander probleem gevonden in het Bicep-bestand. Hier lost u het probleem op.

  1. Open in Visual Studio Code het bestand main.bicep in de implementatiemap .

  2. Bekijk de definitie van de storageAccountName variabele:

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

    Er lijkt een typefout te zijn en de tekenreeksinterpolatie is niet correct geconfigureerd.

  3. Werk de storageAccountName variabele bij om tekenreeksinterpolatie correct te gebruiken:

    var storageAccountName = 'mystorage${resourceNameSuffix}'
    
  4. Sla het bestand op.

  5. Voer uw wijzigingen door en push deze naar uw Git-opslagplaats door de volgende opdrachten uit te voeren in de Visual Studio Code-terminal:

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

De geslaagde pijplijnuitvoering weergeven

  1. Ga in uw browser naar uw pijplijn.

  2. Selecteer de meest recente uitvoering.

    Wacht totdat de pijplijnuitvoering is voltooid. Hoewel Azure Pipelines de pagina automatisch bijwerkt met de meest recente status, is het een goed idee om uw pagina af en toe te vernieuwen.

  3. U ziet dat alle drie de fasen van de pijplijn zijn voltooid:

    Schermopname van de pijplijnuitvoering in Azure DevOps, met alle drie de fasen waarin het succes wordt gerapporteerd.

U hebt nu een pijplijn die fouten in uw Bicep-code vroeg in uw implementatieproces detecteert en vervolgens in Azure implementeert als er geen fouten zijn.