Ćwiczenie — publikowanie modułu w rejestrze

Ukończone

W swojej firmie toy publikujesz moduły Bicep w rejestrze. Proces publikowania został uruchomiony ręcznie z poziomu własnego komputera. Teraz chcesz utworzyć przepływ pracy do obsługi procesu publikowania.

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

  • Utwórz rejestr kontenerów dla modułów Bicep.
  • Dodaj zadanie lint do przepływu pracy.
  • Dodaj zadanie przepływu pracy, aby opublikować moduł w rejestrze.
  • Sprawdź, czy przepływ pracy został pomyślnie uruchomiony.
  • 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 witrynie Azure Portal.

  2. Na karcie Podstawowe wybierz subskrypcję docelową i utworzoną wcześniej grupę zasobów ToyReusable.

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

    Ważne

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

  4. W obszarze Plan cenowy wybierz 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. Po wyświetleniu komunikatu Weryfikacja przekazana wybierz pozycję Utwórz.

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

  7. Po wyświetleniu komunikatu 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 Przegląd rejestru kontenerów zanotuj wartość ustawienia Serwer logowania. Nazwa jest podobna yourregistryname.azurecr.iodo .

    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. Pokazano również, jak używać plików metadanych modułu do określania numeru wersji głównej i pomocniczej modułu w ramach przepływu pracy. W tym miejscu dodasz plik metadanych dla modułu konta magazynu.

  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 metadanych dot J S O N.

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

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

    W pliku metadanych należy oddzielnie zdefiniować główne i pomocnicze numery wersji. Za każdym razem, gdy przepływ pracy jest uruchamiany, przepływ pracy łączy te liczby wraz z numerem uruchomienia przepływu pracy, aby utworzyć pełny numer wersji.

  4. Zapisz zmiany w pliku.

Aktualizowanie definicji przepływu pracy i dodawanie zadania lint

Repozytorium zawiera wersję roboczą przepływu pracy, którego można użyć jako punktu początkowego.

  1. W programie Visual Studio Code rozwiń folder .github/workflows w katalogu głównym repozytorium.

  2. Otwórz plik module-storage-account.yml.

    Zrzut ekranu programu Visual Studio Code przedstawiający lokalizację pliku definicji przepływu pracy.

  3. Zaktualizuj wartość zmiennej środowiskowej MODULE_REGISTRY_SERVER na nazwę serwera rejestru kontenerów. Skopiowano tę nazwę wcześniej w tym ćwiczeniu.

    Jeśli na przykład serwer logowania rejestru jest yourregistryname.azurecr.io, kod jest podobny do następującego przykładu:

    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
  4. W dolnej części pliku dodaj # To be added następującą definicję zadania lint:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    

Dodawanie zadania publikowania do przepływu pracy

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

  1. W dolnej części pliku module-storage-account.yml dodaj pierwszą część definicji zadania publikowania.

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      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 }}
    

    Pierwsze dwa kroki w tej definicji to wyewidencjonowywanie kodu z repozytorium i logowanie się do platformy Azure.

  2. Poniżej właśnie dodanego kodu dodaj kolejny krok, który odczytuje numer wersji z pliku metadata.json modułu i ustawia go jako zmienną środowiskową.

    - name: Get module version number
      run: |
        majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
        versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
        echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
    

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

  3. Po utworzeniu kroku dodaj ostatni krok, aby opublikować moduł w rejestrze.

    - uses: azure/cli@v1
      name: Publish module
      with:
        inlineScript: |
          az bicep publish \
            --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
            --file ${{ env.MODULE_FILE_PATH }}
    

    Ten krok konstruuje wartość argumentu --target dynamicznie. Łączy wartość serwera rejestru, nazwę modułu i numer wersji.

  4. Zapisz zmiany w pliku.

Weryfikowanie i zatwierdzanie definicji przepływu pracy

  1. Sprawdź, czy plik module-storage-account.yml wygląda następująco:

    name: module-storage-account
    concurrency: module-storage-account
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'modules/storage-account/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        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 }}
        - name: Get module version number
          run: |
            majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
            versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
            echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
        - uses: azure/cli@v1
          name: Publish module
          with:
            inlineScript: |
              az bicep publish \
                --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
                --file ${{ env.MODULE_FILE_PATH }}
    

    Jeśli zawartość pliku jest inna, zaktualizuj go, aby był zgodny z tym przykładem, a następnie zapisz plik.

  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 jobs to storage account module workflow"
    git push
    

Wyzwalanie przepływu pracy

  1. W przeglądarce przejdź do repozytorium GitHub i wybierz kartę Akcje .

  2. Wybierz przepływ pracy module-storage-account.

    Zwróć uwagę, że przebieg przepływu pracy jest już w toku. Wyzwalacz wypychania został wyzwolony, ponieważ zmodyfikowano plik metadata.json w folderze modułu.

  3. Wybierz najnowszy przebieg na liście.

    Zrzut ekranu przedstawiający usługę GitHub, która wyróżnia najnowszy przebieg przepływu pracy modułu.

    Poczekaj na zakończenie przebiegu przepływu pracy. Moduł Bicep jest publikowany w rejestrze kontenerów.

    Zwróć uwagę na numer przebiegu przepływu pracy, który prawdopodobnie wynosi 3.

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. W obszarze Zasoby wybierz utworzony wcześniej rejestr kontenerów.

  4. Wybierz pozycję Repozytoria usług>z menu. Następnie wybierz repozytorium modules\storage-account , które reprezentuje moduł opublikowany przez przepływ pracy.

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

    Zwróć uwagę, że istnieje pojedynczy tag zgodny z numerem wersji modułu opublikowanego przez przepływ pracy. Wersja główna (1) i wersja pomocnicza (2) są zgodne z numerami wersji zdefiniowanymi w pliku metadata.json . Numer poprawki (3) jest zgodny z numerem przebiegu przepływu pracy.

Oczyszczanie zasobów

Po ukończeniu ćwiczenia możesz usunąć zasoby, aby nie był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ąć wpisy tajne i repozytorium GitHub oraz tożsamości obciążeń platformy Azure.

  • Wpisy tajne usługi GitHub

    1. W repozytorium GitHub przejdź do pozycji Ustawienia>Wpisy tajne i zmienne>Akcje.
    2. Dla każdego zapisanego wpisu tajnego usługi GitHub wybierz ikonę Usuń <nazwę> wpisu tajnego i postępuj zgodnie z monitami.
  • Repozytorium GitHub

    1. Przejdź do obszaru Ustawienia>Ogólne.
    2. Wybierz pozycję Usuń to repozytorium i postępuj zgodnie z monitami.
  • aplikacja systemu Azure poświadczeń federacyjnych i jednostki usługi rejestracji.

    1. Na stronie głównej portalu wyszukaj ciąg Microsoft Entra ID i wybierz go z listy Usług.
    2. Przejdź do pozycji Zarządzaj> Rejestracje aplikacji.
    3. Na karcie Aplikacje należące wybierz pozycję toy-reusable.
    4. Wybierz pozycję Usuń i postępuj zgodnie z monitami.
    5. Wybierz kartę Usunięte aplikacje .
    6. Wybierz pozycję wielokrotnego użytku, wybierz pozycję Usuń trwale, a następnie wybierz pozycję Tak , aby trwale usunąć rejestrację aplikacji.

    Ważne

    Można mieć zduplikowane nazwy rejestracji aplikacji i nazwy główne usługi. Zalecamy zweryfikowanie identyfikatora aplikacji, aby upewnić się, że usuwasz prawidłowy zasób.