Ćwiczenie — dodawanie lint i weryfikowanie zadań do przepływu pracy

Ukończone

Rozmawiałeś z zespołem i zdecydowałeś się jeszcze bardziej zautomatyzować wdrożenia przy użyciu przepływu pracy. Chcesz budować większą pewność co do wdrażanych rozwiązań.

W tym ćwiczeniu dodasz zadania weryfikacji do przepływu pracy. Następnie uruchomisz linter i walidację wstępną przed każdym wdrożeniem.

Podczas tego procesu wykonujesz następujące zadania:

  • Zaktualizuj istniejący przepływ pracy, aby dodać dwa nowe zadania do lint i zweryfikować kod Bicep.
  • Uruchom przepływ pracy.
  • Rozwiąż wszelkie problemy wykryte przez przepływ pracy.

Dodawanie zadań lint i walidacji do przepływu pracy

  1. W programie Visual Studio Code otwórz plik workflow.yml w folderze .github/workflows .

  2. env: W sekcji zmień wartość zmiennej AZURE_RESOURCEGROUP_NAME na ToyWebsiteTest:

    env:
      AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest
      ENVIRONMENT_TYPE: Test
    
  3. Pod wierszem jobs:deploy powyżej zadania dodaj nowe zadanie lint:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file deploy/main.bicep
    

    To zadanie definiuje krok w celu wyewidencjonowania kodu i kroku, który uruchamia az bicep build polecenie w celu lint pliku Bicep.

    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 dalszej części tego ćwiczenia zobaczysz kompletną definicję przepływu pracy YAML, aby sprawdzić, czy plik jest zgodny.

  4. Poniżej dodanych wierszy i powyżej zadania wdrażania dodaj zadanie weryfikacji:

    validate:
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Run preflight validation
        with:
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
          deploymentMode: Validate
    

    To zadanie definiuje kroki sprawdzania kodu, logowania się do środowiska platformy Azure i używania azure/arm-deploy akcji w trybie Validate wdrażania.

    Definicja przepływu pracy zawiera teraz trzy zadania. Pierwsze lints pliku Bicep, drugi wykonuje walidację wstępną, a trzeci wykonuje wdrożenie na platformie Azure.

  5. runs-on Poniżej wiersza zadania deploy dodaj instrukcjęneeds:

    deploy:
      runs-on: ubuntu-latest
      needs: [lint, validate]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
    

    Instrukcja needs wskazuje, że zadanie wdrażania zależy od lint i walidacji zadań ukończonych pomyślnie przed jego uruchomieniem.

    Zwróć również uwagę, że zarówno zadania weryfikacji, jak i wdrażania są logowane na platformie Azure, a wszystkie zadania wyewidencjonować kod z repozytorium. Te kroki są niezbędne, ponieważ każde zadanie używa nowego modułu uruchamiającego usługę GitHub.

  6. Zapisz plik.

Konfigurowanie lintera

Domyślnie linter Bicep udostępnia ostrzeżenie, gdy wykryje problem z plikiem. Funkcja GitHub Actions nie traktuje ostrzeżeń linter jako problemów, które powinny zatrzymać przepływ pracy. 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 i wklej 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.

Konfigurowanie zadania wdrażania w celu pracy z linterem

W przypadku korzystania z niestandardowej konfiguracji linter Bicep zapisuje dane dziennika, które funkcja GitHub Actions interpretuje jako błąd. Aby wyłączyć to zachowanie, należy skonfigurować arm-deploy zadanie tak, aby ignorowało standardowy strumień dziennika błędów (stderr).

  1. Otwórz plik workflow.yml.

  2. deploy W kroku Testuj witrynę internetową w zadaniu ustaw failOnStdErr właściwość na :false

    deploy:
      runs-on: ubuntu-latest
      needs: [lint, validate]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  3. Zapisz plik.

Weryfikowanie i zatwierdzanie definicji przepływu pracy

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

    name: deploy-toy-website-test
    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest
      ENVIRONMENT_TYPE: Test
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file deploy/main.bicep
    
      validate:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Run preflight validation
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
            deploymentMode: Validate
    
      deploy:
        runs-on: ubuntu-latest
        needs: [lint, validate]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Deploy website
          with:
            failOnStdErr: false
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    

    Jeśli plik wygląda inaczej, zaktualizuj go, 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 jobs"
    git push
    
  3. To zatwierdzenie jest pierwszym wypchnięciem do tego repozytorium, więc może zostać wyświetlony monit o zalogowanie się.

    W systemie Windows wpisz 1 , aby uwierzytelnić się przy użyciu przeglądarki internetowej, a następnie wybierz Enter.

    W systemie macOS wybierz pozycję Autoryzuj.

  4. Pojawi się okno przeglądarki. Może być konieczne ponowne zalogowanie się do usługi GitHub. Wybierz pozycję Autoryzuj.

    Natychmiast po wypchnięciu funkcja GitHub Actions uruchamia nowy przebieg przepływu pracy.

Wyświetlanie przebiegu przepływu pracy

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

    Pierwszy przebieg przepływu pracy z etykietą Zatwierdzenie początkowe jest wyświetlany jako błąd. Usługa GitHub automatycznie uruchamiała przepływ pracy podczas tworzenia repozytorium. Nie powiodło się, ponieważ wpisy tajne nie były w tym czasie gotowe. Możesz zignorować ten błąd.

  2. Wybierz najnowszy przebieg przepływu pracy.

    Zrzut ekranu przedstawiający funkcję GitHub Actions z wyróżnionym linkiem do najnowszego przebiegu przepływu pracy.

    Zwróć uwagę, że uruchomienie przepływu pracy pokazuje teraz trzy zadania zdefiniowane w pliku YAML. Lint i walidacja zadań są uruchamiane równolegle przed rozpoczęciem zadania wdrażania.

  3. Jeśli przepływ pracy jest nadal uruchomiony, zaczekaj na jego zakończenie. Mimo że przepływy pracy automatycznie aktualizują stronę przy użyciu najnowszego stanu, warto od czasu do czasu odświeżyć stronę.

    Zwróć uwagę, że lint i walidacja zadań nie powiodły się.

    Zrzut ekranu przedstawiający przebieg przepływu pracy w funkcji GitHub Actions z błędami raportowania zadań Lint i Validate.

  4. Wybierz zadanie lint, aby wyświetlić jego szczegóły.

  5. Wybierz krok Uruchom linter Bicep, aby wyświetlić dziennik przepływu pracy.

    Zrzut ekranu przedstawiający dziennik przepływu pracy zadania Lint z wyróżnionym krokiem uruchamiania lintera Bicep.

    Błąd w dzienniku przepływu pracy zawiera komunikat o błędzie linter:

    Error no-unused-params: Parameter "storageAccountNameParam" is declared but never used.
    

    Ten komunikat o błędzie 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 również wykrył, że storageAccountNameParam parametr nie jest używany. W programie Visual Studio Code w obszarze parametru jest wyświetlany wiersz z falochła. 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 funkcja GitHub Actions automatycznie wyzwala nowy przebieg przepływu pracy.

Ponowne wyświetlanie przebiegu przepływu pracy

  1. W przeglądarce przejdź do przepływu pracy.

  2. Wybierz najnowszy przebieg.

    Poczekaj na zakończenie przebiegu przepływu pracy. Chociaż funkcja GitHub Actions automatycznie aktualizuje stronę o najnowszym stanie, warto odświeżyć stronę od czasu do czasu.

  3. Zwróć uwagę, że zadanie lint zakończyło się pomyślnie, ale zadanie sprawdzania poprawności nadal kończy się niepowodzeniem.

    Zrzut ekranu przedstawiający przebieg przepływu pracy z informacją o powodzeniu zadania lint i niepowodzeniem raportowania zadań weryfikacji.

  4. Wybierz zadanie weryfikacji, aby wyświetlić jego szczegóły.

  5. Wybierz krok Uruchom weryfikację wstępną, aby wyświetlić dziennik przepływu pracy.

    Zrzut ekranu przedstawiający dziennik przepływu pracy zadania Validate z wyróżnionym krokiem uruchamiania weryfikacji wstępnej.

    Błąd wyświetlany w dzienniku przepływu pracy zawiera następujący komunikat:

    mystorageresourceNameSuffix is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
    

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

Naprawianie błędu sprawdzania poprawności

W pliku Bicep znaleziono inny 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 logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}'
    var applicationInsightsName = 'toywebsite'
    var storageAccountName = 'mystorageresourceNameSuffix'
    

    Wydaje się, że jest literówka, a interpolacja ciągów nie jest 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 przebiegu przepływu pracy

  1. W przeglądarce przejdź do przepływu pracy.

  2. Wybierz najnowszy przebieg.

    Poczekaj na zakończenie przebiegu przepływu pracy. Chociaż funkcja GitHub Actions automatycznie aktualizuje stronę o najnowszym stanie, warto odświeżyć stronę od czasu do czasu.

  3. Zwróć uwagę, że wszystkie trzy zadania w przepływie pracy zakończyły się pomyślnie:

    Zrzut ekranu przedstawiający przebieg przepływu pracy w funkcji GitHub Actions ze wszystkimi trzema zadaniami, które zgłaszają powodzenie.

    Niektóre ostrzeżenia są wyświetlane w panelu Adnotacje . Te ostrzeżenia są wyświetlane ze względu na sposób, w jaki Bicep zapisuje komunikaty informacyjne w dzienniku przepływu pracy. Możesz zignorować te ostrzeżenia.

Masz teraz przepływ pracy, 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.