Ćwiczenie — publikowanie modułu w rejestrze
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.
W przeglądarce utwórz nowy rejestr kontenerów w witrynie Azure Portal.
Na karcie Podstawowe wybierz subskrypcję docelową i utworzoną wcześniej grupę zasobów ToyReusable.
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.
W obszarze Plan cenowy wybierz pozycję Podstawowa.
Pozostaw wartości domyślne innych ustawień konfiguracji.
Wybierz pozycję Przejrzyj i utwórz.
Po wyświetleniu komunikatu Weryfikacja przekazana wybierz pozycję Utwórz.
Poczekaj na zakończenie wdrożenia, co zwykle trwa od 1 do 2 minut.
Po wyświetleniu komunikatu Wdrożenie zakończyło się pomyślnie , wybierz pozycję Przejdź do zasobu , aby otworzyć rejestr kontenerów.
W obszarze Przegląd rejestru kontenerów zanotuj wartość ustawienia Serwer logowania. Nazwa jest podobna
yourregistryname.azurecr.io
do .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.
W programie Visual Studio Code rozwiń folder modules/storage-account w katalogu głównym repozytorium.
Utwórz nowy plik o nazwie metadata.json.
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.
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.
W programie Visual Studio Code rozwiń folder .github/workflows w katalogu głównym repozytorium.
Otwórz plik module-storage-account.yml.
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
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.
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.
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.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.Zapisz zmiany w pliku.
Weryfikowanie i zatwierdzanie definicji przepływu pracy
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.
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
W przeglądarce przejdź do repozytorium GitHub i wybierz kartę Akcje .
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.
Wybierz najnowszy przebieg na liście.
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.
W przeglądarce przejdź do witryny Azure Portal.
Przejdź do grupy zasobów ToyReusable .
W obszarze Zasoby wybierz utworzony wcześniej rejestr kontenerów.
Wybierz pozycję Repozytoria usług>z menu. Następnie wybierz repozytorium modules\storage-account , które reprezentuje moduł opublikowany przez przepływ pracy.
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
- W repozytorium GitHub przejdź do pozycji Ustawienia>Wpisy tajne i zmienne>Akcje.
- Dla każdego zapisanego wpisu tajnego usługi GitHub wybierz ikonę Usuń <nazwę> wpisu tajnego i postępuj zgodnie z monitami.
Repozytorium GitHub
- Przejdź do obszaru Ustawienia>Ogólne.
- Wybierz pozycję Usuń to repozytorium i postępuj zgodnie z monitami.
aplikacja systemu Azure poświadczeń federacyjnych i jednostki usługi rejestracji.
- Na stronie głównej portalu wyszukaj ciąg Microsoft Entra ID i wybierz go z listy Usług.
- Przejdź do pozycji Zarządzaj> Rejestracje aplikacji.
- Na karcie Aplikacje należące wybierz pozycję toy-reusable.
- Wybierz pozycję Usuń i postępuj zgodnie z monitami.
- Wybierz kartę Usunięte aplikacje .
- 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.