Udostępnij za pośrednictwem


Samouczek: konfigurowanie ciągłego wdrażania aplikacji internetowej w języku Python w usłudze Azure Container Apps

Ten artykuł jest częścią serii samouczków dotyczących konteneryzowania i wdrażania aplikacji internetowej w języku Python w celu azure Container Apps. Usługa Container Apps umożliwia wdrażanie konteneryzowanych aplikacji bez zarządzania złożoną infrastrukturą.

W tym samouczku wykonasz następujące elementy:

  • Konfigurowanie ciągłego wdrażania aplikacji kontenera przy użyciu przepływu pracy funkcji GitHub Actions .
  • Wprowadź zmianę w kopii przykładowego repozytorium, aby wyzwolić przepływ pracy funkcji GitHub Actions.
  • Rozwiązywanie problemów, które mogą pojawić się podczas konfiguracji ciągłego wdrażania.
  • Usuń zasoby, których nie potrzebujesz po zakończeniu serii samouczków.

Ciągłe wdrażanie jest związane z praktyką DevOps ciągłej integracji i ciągłego dostarczania (CI/CD), która jest automatyzacją przepływu pracy tworzenia aplikacji.

Na poniższym diagramie przedstawiono zadania opisane w tym samouczku.

Diagram usług związanych z wdrażaniem aplikacji w języku Python w usłudze Azure Container Apps z wyróżnionymi częściami dotyczącymi ciągłego wdrażania.

Warunki wstępne

Aby skonfigurować ciągłe wdrażanie, potrzebne są następujące elementy:

  • Zasoby (i ich konfiguracja), które stworzyłeś w poprzednim samouczku , które obejmują wystąpienie usługi Azure Container Registry i aplikację kontenerową w usłudze Azure Container Apps.

  • Konto usługi GitHub, na którym utworzono rozwidlenie przykładowego kodu (Django lub Flask) i z którym można nawiązać połączenie z usługi Azure Container Apps. (Jeśli pobrałeś przykładowy kod zamiast forka, pamiętaj, aby przesłać swoje lokalne repozytorium do swojego konta w usłudze GitHub).

  • Aby opcjonalnie wprowadzać zmiany w kodzie i wypychać je do repozytorium w usłudze GitHub, możesz zainstalować Git w swoim środowisku deweloperskim. Alternatywnie możesz wprowadzić zmiany bezpośrednio w usłudze GitHub.

Konfigurowanie ciągłego wdrażania dla kontenera

W poprzednim samouczku utworzono i skonfigurowano aplikację kontenera w usłudze Azure Container Apps. Część konfiguracji pobierała obraz Docker z wystąpienia usługi Azure Container Registry. Obraz kontenera jest ściągany z rejestru podczas tworzenia wersji kontenera , na przykład przy pierwszej konfiguracji aplikacji kontenerowej.

W tej sekcji skonfigurujesz ciągłe wdrażanie przy użyciu przepływu pracy funkcji GitHub Actions. Przy ciągłym wdrażaniu nowy obraz Docker i wersja kontenera są tworzone na podstawie wyzwalacza. Wyzwalaczem w tym samouczku jest każda zmiana w głównej gałęzi repozytorium, na przykład z pull requestem. Po uruchomieniu przepływu pracy jest tworzony nowy obraz Docker, który jest przesyłany do instancji Azure Container Registry i aplikacja kontenera jest aktualizowana do nowej wersji za pomocą nowego obrazu.

Polecenia interfejsu wiersza polecenia platformy Azure można uruchamiać w usłudze Azure Cloud Shell lub na stacji roboczej, na której zainstalowano interfejs wiersza polecenia platformy Azure.

Jeśli uruchamiasz polecenia w powłoce Git Bash na komputerze z systemem Windows, przed kontynuowaniem wprowadź następujące polecenie:

export MSYS_NO_PATHCONV=1
  1. Utwórz jednostkę usługi przy użyciu polecenia az ad sp create-for-rbac:

    az ad sp create-for-rbac \
    --name <app-name> \
    --role Contributor \
    --scopes "/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>"
    

    W poleceniu:

    • <nazwa aplikacji> jest opcjonalną nazwą wyświetlaną jednostki usługi. Jeśli pominiesz opcję --name, identyfikator GUID zostanie wygenerowany jako nazwa wyświetlana.
    • <identyfikator subskrypcji> to identyfikator GUID, który jednoznacznie identyfikuje twoją subskrypcję na platformie Azure. Jeśli nie znasz identyfikatora subskrypcji, możesz uruchomić polecenie az account show i skopiować je z właściwości id w danych wyjściowych.
    • <nazwa-grupy zasobów> jest nazwą grupy zasobów zawierającej kontener usługi Azure Container Apps. Kontrola dostępu oparta na rolach (RBAC) jest na poziomie grupy zasobów. Jeśli wykonano kroki opisane w poprzednim samouczku, nazwa grupy zasobów to pythoncontainer-rg.

    Zapisz dane wyjściowe tego polecenia w następnym kroku. W szczególności zapisz identyfikator klienta ( właściwośćappId), klucz tajny klienta ( właściwośćpassword) i identyfikator dzierżawy ( właściwośćtenant).

  2. Skonfiguruj funkcję GitHub Actions przy użyciu polecenia az containerapp github-action add:

    az containerapp github-action add \
    --resource-group <resource-group-name> \
    --name python-container-app \
    --repo-url <https://github.com/userid/repo> \
    --branch main \
    --registry-url <registry-name>.azurecr.io \
    --service-principal-client-id <client-id> \
    --service-principal-tenant-id <tenant-id> \
    --service-principal-client-secret <client-secret> \
    --login-with-github
    

    W poleceniu:

    • <nazwa grupy zasobów> jest nazwą grupy zasobów. W tym samouczku to jest pythoncontainer-rg.
    • <https://github.com/userid/repo> to adres URL repozytorium GitHub. W tym samouczku jest to https://github.com/userid/msdocs-python-django-azure-container-apps lub https://github.com/userid/msdocs-python-flask-azure-container-apps. W tych adresach URL userid jest identyfikatorem użytkownika usługi GitHub.
    • ** <nazwa rejestru> to istniejący rejestr Azure Container Registry, który utworzono w poprzednim samouczku lub który możesz wykorzystać.
    • <identyfikator klienta> jest wartością właściwości appId z poprzedniego polecenia az ad sp create-for-rbac. Id jest identyfikatorem GUID w postaci 00000000-0000-0000-0000-00000000.
    • <identyfikator dzierżawy> jest wartością właściwości tenant z poprzedniego polecenia az ad sp create-for-rbac. Identyfikator to również GUID, podobny do identyfikatora klienta.
    • <client-secret> jest wartością właściwości password z poprzedniego polecenia az ad sp create-for-rbac.

W konfiguracji ciągłego wdrażania jednostka usługi umożliwia usłudze GitHub Actions uzyskiwanie dostępu do zasobów platformy Azure i modyfikowanie ich. Role przypisane do jednostki usługi ograniczają dostęp do zasobów. Jednostce usługi przypisano wbudowaną rolę Współautora w grupie zasobów zawierającej aplikację kontenerową.

Jeśli wykonano kroki portalu, jednostka usługi została automatycznie utworzona. Jeśli postępowałeś zgodnie z krokami dla Azure CLI, wyraźnie utworzono głównego identyfikatora usługi przed skonfigurowaniem ciągłego wdrażania.

Ponowne wdrażanie aplikacji internetowej za pomocą funkcji GitHub Actions

W tej sekcji wprowadzisz zmianę rozwidlenia kopii przykładowego repozytorium. Następnie możesz potwierdzić, że zmiana zostanie automatycznie wdrożona w witrynie internetowej.

Jeśli jeszcze tego nie zrobiłeś, stwórz rozwidlenie przykładowego repozytorium (Django lub Flask). Możesz wprowadzić zmiany kodu bezpośrednio w GitHub lub w środowisku deweloperskim z poziomu wiersza polecenia za pomocą Gita.

  • GitHub
  • wiersza polecenia
  1. Przejdź do rozwidlenia przykładowego repozytorium i zacznij od gałęzi głównej .

    Zrzut ekranu przedstawiający gałąź główną w rozwidleniu przykładowego repozytorium.

  2. Wprowadź zmianę:

    1. Przejdź do pliku /templates/base.html. (W przypadku platformy Django ścieżka to restaurant_review/templates/restaurant_review/base.html).)
    2. Wybierz pozycję Edytuj i zmień frazę Azure Restaurant Review na Azure Restaurant Review - Redeployed.

    Zrzut ekranu przedstawiający, jak wprowadzić zmianę w pliku szablonu w rozwidleniu przykładowego repozytorium.

  3. Na dole strony, którą edytujesz, upewnij się, że bezpośrednie zatwierdzenie w gałęzi głównej jest zaznaczone. Następnie wybierz przycisk Zatwierdź zmiany.

    Zrzut ekranu przedstawiający opcje wprowadzenia zmiany w pliku szablonu w forku przykładowego repozytorium.

Zatwierdzenie rozpoczyna przepływ pracy funkcji GitHub Actions.

Notatka

W tym samouczku przedstawiono wprowadzanie zmian bezpośrednio w gałęzi głównej . W typowych przepływach pracy oprogramowania wprowadzasz zmianę w gałęzi innej niż główna, a następnie tworzysz żądanie połączenia, aby scalić zmianę w główną. Pull requesty również uruchamiają przepływ pracy.

Omówienie funkcji GitHub Actions

Wyświetlanie historii przepływu pracy

Jeśli chcesz wyświetlić historię przepływu pracy, użyj jednej z poniższych procedur.

  • GitHub
  • wiersza polecenia

Na GitHubprzejdź do swojego rozwidlenia przykładowego repozytorium i otwórz kartę Akcje.

Zrzut ekranu przedstawiający przepływy pracy na karcie Akcje dla repozytorium.

Sekrety przepływu pracy

Plik workflow .github/workflows/<nazwa-przepływu-pracy>.yml dodany do repozytorium zawiera miejsca zastępcze dla poświadczeń potrzebnych do zadań budowy i aktualizacji aplikacji kontenerowej w ramach przepływu pracy. Informacje o poświadczeniach są przechowywane w obszarze Ustawienia repozytorium, w sekcji Tajne dane i zmienne związane z zabezpieczeniami , a także w dziale Akcje>>.

Zrzut ekranu pokazujący poświadczenia jako sekrety GitHub Actions.

Jeśli informacje o poświadczeniach się zmienią, możesz je zaktualizować tutaj. Jeśli na przykład hasła usługi Azure Container Registry są ponownie generowane, musisz zaktualizować wartość REGISTRY_PASSWORD. Aby uzyskać więcej informacji, zobacz Encrypted secrets w dokumentacji usługi GitHub.

Aplikacje autoryzowane przez protokół OAuth

Podczas konfigurowania ciągłego wdrażania należy wyznaczyć usługę Azure Container Apps jako autoryzowaną aplikację OAuth dla konta usługi GitHub. Container Apps używa autoryzowanych uprawnień do tworzenia pliku YAML GitHub Actions w .github/workflows/<workflow-name>.yml. Możesz wyświetlić autoryzowane aplikacje i odwołać uprawnienia na swoim koncie w obszarze Integrations>Applications.

Zrzut ekranu przedstawiający lokalizację autoryzowanych aplikacji dla użytkownika w usłudze GitHub.

Rozwiązywanie problemów

Podczas konfigurowania jednostki usługi za pośrednictwem interfejsu wiersza polecenia platformy Azure występują błędy

Ta sekcja może pomóc w rozwiązywaniu problemów z błędami, które występują podczas konfigurowania jednostki usługi przy użyciu interfejsu wiersza polecenia platformy Azure az ad sp create-for-rba polecenia.

Jeśli wystąpi błąd zawierający komunikat "InvalidSchema: Nie znaleziono adapterów połączenia":

Jeśli wystąpi błąd zawierający komunikat "Więcej niż jedna aplikacja ma taką samą nazwę wyświetlaną":

  • Nazwa jest już zajęta dla jednostki usługi. Wybierz inną nazwę lub usuń argument --name. Identyfikator GUID zostanie wygenerowany automatycznie jako nazwa wyświetlana.

Przepływ pracy GitHub Actions nie powiódł się

Aby sprawdzić stan przepływu pracy, przejdź do zakładki Actions w repozytorium:

  • Jeśli przepływ pracy zakończył się niepowodzeniem, przejdź do szczegółów pliku przepływu pracy. Powinny istnieć dwa zadania: kompilowanie i wdrażanie. W przypadku niepowodzenia zadania sprawdź dane wyjściowe jego zadań, aby znaleźć problemy.
  • Jeśli pojawi się komunikat o błędzie zawierający "przekroczenie czasu uzgadniania TLS," uruchom proces ręcznie. W repozytorium na karcie akcje wybierz pozycję Wyzwalaj automatyczne wdrażanie, aby sprawdzić, czy limit czasu jest tymczasowym problemem.
  • Jeśli skonfigurujesz ciągłe wdrażanie aplikacji kontenera, jak pokazano w tym samouczku, zostanie automatycznie utworzony plik przepływu pracy (.github/workflows/<nazwa przepływu pracy>.yml). Nie należy modyfikować tego pliku na potrzeby tego samouczka. Jeśli tak, przywróć zmiany i spróbuj użyć tego schematu.

Witryna internetowa nie pokazuje zmian scalonych w gałęzi głównej

W usłudze GitHub:

  • Sprawdź, czy przepływ pracy GitHub Actions został uruchomiony i czy zmiany zostały wprowadzone do gałęzi, która wyzwala przepływ pracy.

W witrynie Azure Portal:

  • Sprawdź wystąpienie usługi Azure Container Registry, aby sprawdzić, czy nowy obraz Docker został utworzony z sygnaturą czasową po zmianie gałęzi.

  • Sprawdź dzienniki aplikacji kontenera, aby sprawdzić, czy wystąpił błąd programowania:

    1. Przejdź do aplikacji kontenera, a następnie przejdź do Revision Management><aktywnego kontenera>>szczegóły rewizji>logi konsoli.
    2. Wybierz kolejność kolumn, aby wyświetlić Wygenerowany czas, Stream_si Log_s.
    3. Posortuj dzienniki według najnowszych i poszukaj komunikatów języka Python stderr i stdout w kolumnie Stream_s. Dane wyjściowe print języka Python są komunikatami stdout.

W Azure CLI:

Chcesz zatrzymać proces ciągłego wdrażania

Zatrzymanie ciągłego wdrażania oznacza odłączenie aplikacji kontenera od repozytorium.

W witrynie Azure Portal:

  • Przejdź do aplikacji kontenera. W menu usługi wybierz pozycję Ciągłe wdrażanie, a następnie wybierz pozycję Rozłącz.

W Azure CLI:

Po rozłączeniu:

  • Plik .github/workflows/<nazwa przepływu pracy>.yml jest usuwany z repozytorium.
  • Klucze tajne nie są usuwane z repozytorium.
  • Usługa Azure Container Apps pozostaje autoryzowaną aplikacją OAuth dla konta usługi GitHub.
  • Na platformie Azure kontener pozostaje z ostatnim wdrożonym kontenerem. Możesz ponownie połączyć aplikację kontenerową z wystąpieniem usługi Azure Container Registry, aby nowe wersje kontenera pobierały najnowszy obraz.
  • Na platformie Azure zasady usługi, które zostały utworzone i używane do ciągłego wdrażania, nie są usuwane.

Usuwanie zasobów

Jeśli skończysz z serią samouczków i nie chcesz ponosić dodatkowych kosztów, usuń użyte zasoby.

Usunięcie grupy zasobów spowoduje usunięcie wszystkich zasobów w grupie i jest najszybszym sposobem usunięcia zasobów. Aby zapoznać się z przykładem usuwania grup zasobów, zobacz Containerize tutorial cleanup.

Jeśli planujesz skorzystać z tego samouczka, poniżej przedstawiono kilka następnych kroków, które można wykonać: