Ćwiczenie — publikowanie modułu w rejestrze

Ukończone

W swojej firmie z zabawkami publikujesz moduły Bicep w rejestrze. Zarządzasz procesem publikowania ręcznie z własnego komputera. Obecnie chcesz utworzyć proces do obsługi procesu publikowania.

W tym ćwiczeniu wykonasz następujące czynności:

  • Utwórz rejestr kontenerów dla modułów Bicep.
  • Dodaj etap lintowania do pipeline'u.
  • Dodaj etap potoku, aby opublikować moduł w rejestrze.
  • Sprawdź, czy twój pipeline działa pomyślnie.
  • Sprawdź opublikowany moduł w rejestrze.

Tworzenie rejestru kontenerów

Przed opublikowaniem modułów należy utworzyć rejestr używany przez organizację. W tym miejscu utworzysz rejestr przy użyciu witryny Azure Portal.

  1. W przeglądarce utwórz nowy rejestr kontenerów w portalu Azure.

  2. Na karcie podstawowe wybierz docelową subskrypcję i grupę zasobów ToyReusable, którą utworzyłeś wcześniej.

  3. Wprowadź nazwę rejestru i lokalizację znajdującą się blisko Ciebie.

    Ważny

    Nazwa rejestru musi być unikatowa na platformie Azure i zawierać od 5 do 50 znaków alfanumerycznych. Znacznik wyboru obok nazwy rejestru wskazuje, że wybrana nazwa jest dostępna.

  4. W przypadku jednostki SKUwybierz pozycję Podstawowa.

    Pozostaw wartości domyślne innych ustawień konfiguracji.

  5. Wybierz pozycję Przejrzyj i utwórz.

    Zrzut ekranu witryny Azure Portal przedstawiający stronę tworzenia rejestru kontenerów.

  6. Przejrzyj ustawienia, upewniając się, że walidacja zakończona pomyślnie , a następnie wybierz Utwórz.

    Poczekaj na zakończenie wdrożenia, co zwykle trwa od 1 do 2 minut.

  7. Gdy zostanie wyświetlony komunikat Wdrożenie zakończyło się pomyślnie, wybierz pozycję Przejdź do zasobu, aby otworzyć rejestr kontenerów.

    Zrzut ekranu witryny Azure Portal przedstawiający wdrożenie rejestru kontenerów z wyróżnionym przyciskiem przechodzenia do zasobu.

  8. W obszarze Omówienie rejestru kontenerów zapisz wartość ustawienia serwera logowania. Będzie to wyglądało mniej więcej tak: yourregistryname.azurecr.io.

    Zrzut ekranu witryny Azure Portal przedstawiający szczegóły rejestru kontenerów z wyróżnionym serwerem logowania.

    Ta wartość będzie potrzebna wkrótce.

Dodawanie pliku metadanych modułu

W poprzedniej lekcji przedstawiono znaczenie strategii przechowywania wersji dla modułów. Nauczyłeś się także, jak używać plików metadanych modułu do określenia głównego i drugorzędnego numeru wersji modułu w potoku. W tym miejscu dodajesz plik metadanych dla modułu konta przechowywania.

  1. W programie Visual Studio Code rozwiń folder modules/storage-account w katalogu głównym repozytorium.

  2. Utwórz nowy plik o nazwie metadata.json.

    Zrzut ekranu programu Visual Studio Code przedstawiający lokalizację pliku JSON metadanych.

  3. Dodaj następującą zawartość do pliku:

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    Zwróć uwagę, że w pliku metadanych należy oddzielnie zdefiniować główne i pomocnicze numery wersji. Potok łączy te liczby wraz z numerem kompilacji potoku w kompletny numer wersji przy każdym uruchomieniu potoku.

  4. Zapisz zmiany w pliku.

Zaktualizuj definicję rurociągu i dodaj etap lint

Repozytorium zawiera wersję roboczą pipeline'u, którego można użyć jako punktu wyjścia.

  1. Otwórz plik pipeline.yml w folderze modules/storage-account.

  2. Zaktualizuj wartość zmiennej środowiskowej ModuleRegistryServer na nazwę serwera rejestru kontenerów. Wcześniej w tym ćwiczeniu skopiowałeś tę nazwę.

    Jeśli na przykład serwer logowania rejestru to yourregistryname.azurecr.io, to będzie wyglądało następująco:

    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    
  3. Na dole pliku, przy komentarzu # To be added, znajduje się następująca definicja etapu lint:

    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    

Dodaj etap publikacji do ciągu

Teraz możesz dodać drugi etap, aby opublikować moduł w rejestrze kontenerów.

  1. W dolnej części pliku pipeline.yml zdefiniuj etap publikowania i dodaj krok, aby odczytać numer wersji z pliku metadata.json modułu i ustawić go jako zmienną potoku.

    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
    

    Krok uruchamia skrypt, który używa aplikacji wiersza polecenia jq do analizowania pliku JSON.

  2. Poniżej utworzonego kroku dodaj krok publikowania modułu w rejestrze.

    - task: AzureCLI@2
      name: Publish
      displayName: Publish module
      inputs:
        azureSubscription: $(ServiceConnectionName)
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az bicep publish \
            --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
            --file $(ModuleFilePath)
    

    Zwróć uwagę, że ten krok tworzy wartość argumentu --target dynamicznie. Łączy wartość serwera rejestru, nazwę modułu i numer wersji.

  3. Zapisz zmiany w pliku.

Zweryfikuj i zatwierdź definicję pipelina

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

    trigger:
      batch: true
      branches:
        include:
        - main
      paths:
        include:
        - 'modules/storage-account/**'
    
    variables: 
    - name: ServiceConnectionName
      value: ToyReusable
    - name: ModuleName
      value: storage-account
    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    - name: ModuleFilePath
      value: modules/storage-account/main.bicep
    - name: ModuleMetadataFilePath
      value: modules/storage-account/metadata.json
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
          - task: AzureCLI@2
            name: Publish
            displayName: Publish module
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az bicep publish \
                  --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
                  --file $(ModuleFilePath)
    

    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 publish stages to storage account module pipeline"
    git push
    

    Natychmiast po zatwierdzeniu zmian usługa Azure Pipelines uruchamia nowy potok.

Monitoruj rurociąg

  1. W przeglądarce wybierz pozycję Pipelines>Pipelines.

  2. Wybierz aktywne uruchomienie potoku.

  3. Uruchomienie potoku jest wyświetlane.

    Poczekaj na zakończenie przebiegu potoku. Moduł Bicep został opublikowany w rejestrze kontenerów.

  4. Zanotuj numer kompilacji ciągu, który zawiera dzisiejszą datę i unikatowy numer poprawki.

Przejrzyj moduł w rejestrze

Opublikowany moduł można również wyświetlić w witrynie Azure Portal.

  1. W przeglądarce przejdź do witryny Azure Portal.

  2. Przejdź do grupy zasobów ToyReusable.

  3. Wybierz utworzony wcześniej rejestr kontenerów.

  4. Wybierz okienko Repozytoria z menu. Następnie wybierz repozytorium modules\storage-account, które reprezentuje moduł opublikowany przez Twój potok danych.

    Zrzut ekranu witryny Azure Portal przedstawiający moduł Bicep w rejestrze kontenerów.

    Zwróć uwagę, że istnieje jeden tag , który odpowiada numerowi wersji modułu opublikowanego przez przepływ danych. Wersja główna (1) i wersja pomocnicza (2) są zgodne z numerami wersji zdefiniowanymi w pliku metadata.json. Numer poprawki (20230407.3) jest zgodny z numerem budowy w potoku.

Czyszczenie zasobów

Po ukończeniu ćwiczenia możesz usunąć zasoby, aby nie zostały naliczane opłaty.

W terminalu programu Visual Studio Code uruchom następujące polecenie:

az group delete --resource-group ToyReusable --yes --no-wait

Grupa zasobów jest usuwana w tle.

Remove-AzResourceGroup -Name ToyReusable -Force

Możesz również usunąć połączenie z usługą i projekt usługi Azure DevOps.

  • Podłączenie usługi

    1. W projekcie Azure DevOps wybierz pozycję Ustawienia projektu>Połączenia usługi.
    2. Wybierz ToyReusable.
    3. W prawym górnym rogu wybierz trzy kropki dla Więcej akcji.
    4. Wybierz pozycję Usuń i potwierdź usunięcie.
  • Rejestracja aplikacji platformy Azure

    1. Na stronie głównej portalu wyszukaj Microsoft Entra ID i wybierz ją z listy usług Services.
    2. Przejdź do Zarządzanie rejestracjami aplikacji>.
    3. W obszarze Usunięte aplikacje wybierz wielokrotnego użytku.
    4. Wybierz pozycję Usuń trwale i postępuj zgodnie z monitami.
  • Projekt usługi Azure DevOps

    1. W projekcie Usługi Azure DevOps wybierz pozycję Ustawienia projektu>Przegląd.
    2. Z Usuń projekt wybierz Usuń.
    3. Wprowadź nazwę projektu i potwierdź usunięcie.