Ćwiczenie — dodawanie lint i weryfikowanie etapów do potoku

Ukończone

Rozmawialiśmy z zespołem i podjęto decyzję o dalszej automatyzacji wdrożeń przy użyciu potoku. Chcesz budować większą pewność co do wdrażanych rozwiązań.

W tym ćwiczeniu dodasz etapy weryfikacji do potoku. Następnie uruchomisz linter i walidację wstępną przed każdym wdrożeniem.

Podczas tego procesu wykonasz następujące czynności:

  • Zaktualizuj istniejący potok, aby dodać dwa nowe etapy do lint i zweryfikować kod Bicep.
  • Uruchom swój potok.
  • Rozwiąż wszelkie problemy wykryte przez potok.

Aktualizowanie potoku w celu przygotowania do etapów

Najpierw należy zaktualizować plik potoku, aby zdefiniować etap. Usługa Azure Pipelines automatycznie tworzy jeden etap, ale ponieważ wkrótce dodasz więcej etapów, musisz zaktualizować potok, aby jawnie zdefiniować etapy.

  1. W programie Visual Studio Code otwórz plik azure-pipelines.yml w folderze deploy .

  2. Usuń wszystko w pliku z wiersza 14 do dołu pliku. Pamiętaj również, aby usunąć jobs: wiersz.

  3. W dolnej części pliku dodaj następujący kod:

    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)
    

    Napiwek

    Pliki YAML są wrażliwe na wcięcia. Bez względu na to, czy wpiszesz, czy wklejasz ten kod, upewnij się, że wcięcie jest poprawne. W następnej sekcji zobaczysz pełną definicję potoku YAML, aby sprawdzić, czy plik jest zgodny.

Dodawanie etapów lint i walidacji do potoku

  1. stages: Poniżej wiersza dodaj etap lint:

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

    Ten etap definiuje jeden krok, który uruchamia az bicep build polecenie w celu lint pliku Bicep.

  2. Poniżej dodanych wierszy dodaj etap weryfikacji:

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

    Ten etap definiuje pojedynczy krok, który uruchamia weryfikację wstępną. Zwróć uwagę, że ten krok zawiera odwołanie do połączenia z usługą, ponieważ proces weryfikacji wstępnej wymaga komunikacji z platformą Azure.

    Definicja potoku ma teraz trzy etapy. Pierwszy uruchamia linter w pliku Bicep, drugi wykonuje walidację wstępną, a trzeci wykonuje wdrożenie na platformie Azure.

  3. Zapisz plik.

Konfigurowanie lintera

Domyślnie linter Bicep udostępnia ostrzeżenie, gdy wykryje problem z plikiem. Usługa Azure Pipelines nie traktuje ostrzeżeń linter jako problemów, które powinny zatrzymać potok. Aby dostosować to zachowanie, należy utworzyć plik bicepconfig.json , który ponownie konfiguruje linter.

  1. Dodaj nowy plik w folderze deploy i nadaj mu nazwę bicepconfig.json.

    Zrzut ekranu eksploratora programu Visual Studio Code z nowym plikiem widocznym w folderze deploy.

  2. Skopiuj następujący kod do pliku:

    {
      "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. Zapisz plik.

Weryfikowanie i zatwierdzanie definicji potoku

  1. Sprawdź, czy plik azure-pipelines.yml wygląda następująco:

    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)
    

    Jeśli tak nie jest, zaktualizuj go tak, aby był zgodny z tym przykładem, a następnie zapisz go.

  2. Zatwierdź i wypchnij zmiany do repozytorium Git, uruchamiając następujące polecenia w terminalu programu Visual Studio Code:

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

    Natychmiast po wypchnięciu usługa Azure Pipelines uruchamia nowe uruchomienie potoku.

Wyświetlanie przebiegu potoku

  1. W przeglądarce przejdź do pozycji Potoki.

  2. Wybierz najnowszy przebieg potoku.

    Zrzut ekranu przedstawiający usługę Azure DevOps z wyróżnionym linkiem do najnowszego uruchomienia potoku.

    Jeśli potok jest nadal uruchomiony, zaczekaj na jego zakończenie. Chociaż usługa Azure Pipelines automatycznie aktualizuje stronę o najnowszym stanie, warto odświeżyć stronę od czasu do czasu.

  3. Zwróć uwagę, że uruchomienie potoku pokazuje teraz trzy etapy zdefiniowane w pliku YAML. Zwróć również uwagę, że etap lint zakończył się niepowodzeniem.

    Zrzut ekranu przedstawiający przebieg potoku w usłudze Azure DevOps z błędem raportowania etapów lint.

  4. Wybierz etap Lint, aby wyświetlić jego szczegóły.

    Zrzut ekranu przedstawiający przebieg potoku w usłudze Azure DevOps z wyróżnioną nazwą etapu Lint.

  5. Wybierz krok Uruchom linter Bicep, aby wyświetlić dziennik potoku.

    Zrzut ekranu przedstawiający dziennik potoku dla etapu Lint z wyróżnionym krokiem uruchamiania lintera Bicep.

    Zwróć uwagę, że wyświetlany błąd jest podobny do następującego:

    Błąd no-unused-params: Parametr "storageAccountNameParam" jest zadeklarowany, ale nigdy nie został użyty.

    Ten błąd wskazuje, że linter odnalazł naruszenie reguły w pliku Bicep.

Naprawianie błędu linter

Po zidentyfikowaniu problemu możesz go rozwiązać w pliku Bicep.

  1. W programie Visual Studio Code otwórz plik main.bicep w folderze deploy .

  2. Zwróć uwagę, że linter Bicep wykrył również, że storageAccountNameParam parametr nie jest używany. Program Visual Studio Code wskazuje nieużywany parametr z zwijanym wierszem. Zwykle linia będzie żółta, aby wskazać ostrzeżenie. Ale ponieważ dostosowano plik bicepconfig.json , linter traktuje kod jako błąd i wyświetla wiersz na czerwono.

    param storageAccountNameParam string = uniqueString(resourceGroup().id)
    
  3. storageAccountNameParam Usuń parametr .

  4. Zapisz plik.

  5. Zatwierdź i wypchnij zmiany do repozytorium Git, uruchamiając następujące polecenia w terminalu programu Visual Studio Code:

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

    Po raz kolejny usługa Azure Pipelines automatycznie wyzwala nowy przebieg potoku.

Ponowne wyświetlanie przebiegu potoku

  1. W przeglądarce przejdź do potoku.

  2. Wybierz najnowszy przebieg.

    Poczekaj na zakończenie przebiegu potoku. Chociaż usługa Azure Pipelines automatycznie aktualizuje stronę o najnowszym stanie, warto odświeżyć stronę od czasu do czasu.

  3. Zwróć uwagę, że etap lint zakończył się pomyślnie, ale teraz etap Weryfikacji zakończył się niepowodzeniem.

    Zrzut ekranu przedstawiający przebieg potoku z informacją o powodzeniu raportowania etapu lint i niepowodzeniem weryfikowania raportowania etapów.

  4. Wybierz etap Weryfikuj, aby wyświetlić jego szczegóły.

  5. Wybierz krok Uruchom weryfikację wstępną, aby wyświetlić dziennik potoku.

    Zrzut ekranu przedstawiający dziennik potoku dla etapu Walidacja z wyróżnionym krokiem uruchamiania weryfikacji wstępnej.

    Zwróć uwagę, że błąd wyświetlany w dzienniku zawiera następujący komunikat:

    mystorageresourceNameSuffix nie jest prawidłową nazwą konta magazynu. Nazwa konta magazynu musi mieć długość od 3 do 24 znaków, a tylko cyfry i małe litery.

    Ten błąd wskazuje, że nazwa konta magazynu jest nieprawidłowa.

Naprawianie błędu sprawdzania poprawności

W pliku Bicep znaleziono kolejny problem. W tym miejscu rozwiążesz problem.

  1. W programie Visual Studio Code otwórz plik main.bicep w folderze deploy .

  2. Przyjrzyj się definicji zmiennej storageAccountName :

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

    Wydaje się, że jest literówka, a interpolacja ciągów nie została poprawnie skonfigurowana.

  3. Zaktualizuj zmienną, storageAccountName aby prawidłowo używała interpolacji ciągów:

    var storageAccountName = 'mystorage${resourceNameSuffix}'
    
  4. Zapisz plik.

  5. Zatwierdź i wypchnij zmiany do repozytorium Git, uruchamiając następujące polecenia w terminalu programu Visual Studio Code:

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

Wyświetlanie pomyślnego uruchomienia potoku

  1. W przeglądarce przejdź do potoku.

  2. Wybierz najnowszy przebieg.

    Poczekaj na zakończenie przebiegu potoku. Chociaż usługa Azure Pipelines automatycznie aktualizuje stronę o najnowszym stanie, warto odświeżyć stronę od czasu do czasu.

  3. Zwróć uwagę, że wszystkie trzy etapy potoku zakończyły się pomyślnie:

    Zrzut ekranu przedstawiający przebieg potoku w usłudze Azure DevOps ze wszystkimi trzema etapami raportowania powodzenia.

Masz teraz potok, który pomyślnie wykrywa błędy w kodzie Bicep na wczesnym etapie procesu wdrażania, a następnie wdraża na platformie Azure, jeśli nie ma żadnych błędów.