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

Ten artykuł jest częścią samouczka dotyczącego konteneryzowania i wdrażania aplikacji internetowej w języku Python w usłudze Azure Container Apps. Usługa Container Apps umożliwia wdrażanie konteneryzowanych aplikacji bez zarządzania złożoną infrastrukturą.

W tej części samouczka dowiesz się, jak skonfigurować ciągłe wdrażanie lub ciągłe dostarczanie dla aplikacji kontenera. Ciągłe wdrażanie jest częścią praktyki devOps ciągłej integracji/ciągłego dostarczania (CI/CD), która jest automatyzacją przepływu pracy tworzenia aplikacji. W szczególności używasz funkcji GitHub Actions do ciągłego wdrażania.

Ten diagram usługi przedstawia składniki opisane w tym artykule: konfiguracja ciągłej integracji/ciągłego wdrażania.

A screenshot of the services in the Tutorial - Deploy a Python App on Azure Container Apps. Sections highlighted are parts related to continuous integration - continuous delivery (CI/CD).

Wymagania wstępne

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

  • Zasoby i ich konfiguracja utworzona w poprzednim artykule z tej serii samouczków, w tym usługa Azure Container Registry i aplikacja kontenera w usłudze Azure Container Apps.

  • Konto usługi GitHub, na którym utworzono rozwidlenie przykładowego kodu (Django lub Flask) i możesz nawiązać połączenie z usługą Azure Container Apps. (Jeśli pobrano przykładowy kod zamiast rozwidlenia, upewnij się, że wypchniesz lokalne repozytorium do konta usługi GitHub).

  • Opcjonalnie usługa Git zainstalowana w środowisku deweloperskim w celu wprowadzenia zmian w kodzie i wypchnięcia do repozytorium w usłudze GitHub. Alternatywnie możesz wprowadzić zmiany bezpośrednio w usłudze GitHub.

Konfigurowanie dysku CD dla kontenera

W poprzednim artykule tego samouczka utworzono i skonfigurowano aplikację kontenera w usłudze Azure Container Apps. Część konfiguracji ściągała obraz platformy Docker z usługi Azure Container Registry. Obraz kontenera jest ściągany z rejestru podczas tworzenia poprawki kontenera, na przykład podczas pierwszej konfiguracji aplikacji kontenera.

W tej sekcji skonfigurujesz ciągłe wdrażanie przy użyciu przepływu pracy funkcji GitHub Actions. W przypadku ciągłego wdrażania nowy obraz platformy Docker i poprawka kontenera są tworzone na podstawie wyzwalacza. Wyzwalacz w tym samouczku to dowolna zmiana gałęzi głównej repozytorium, na przykład za pomocą żądania ściągnięcia (PR). Po wyzwoleniu przepływ pracy tworzy nowy obraz platformy Docker, wypycha go do usługi Azure Container Registry i aktualizuje aplikację kontenera do nowej poprawki przy użyciu nowego obrazu.

Polecenia interfejsu wiersza polecenia platformy Azure można uruchamiać w usłudze Azure Cloud Shell lub na stacji roboczej z zainstalowanym interfejsem 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

Krok 1. Utwórz jednostkę usługi za pomocą 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>"

Gdzie:

  • <app-name> to opcjonalna nazwa wyświetlana jednostki usługi. Jeśli opcja zostanie wyłączona --name , identyfikator GUID zostanie wygenerowany jako nazwa wyświetlana.
  • <subscription-ID> 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 id właściwości w danych wyjściowych.
  • <resource-group-name> to nazwa grupy zasobów, która zawiera 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 artykule w tym samouczku, nazwa grupy zasobów to pythoncontainer-rg.

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

Krok 2. Skonfiguruj funkcję GitHub Actions za pomocą 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

Gdzie:

  • <resource-group-name> to nazwa grupy zasobów. Jeśli obserwujesz ten samouczek, jest to "pythoncontainer-rg".
  • <https://github.com/userid/repo> to adres URL repozytorium GitHub. Jeśli wykonasz kroki opisane w tym samouczku, będzie on mieć wartość https://github.com/userid/msdocs-python-django-azure-container-apps lub https://github.com/userid/msdocs-python-flask-azure-container-apps; gdzie userid jest identyfikatorem użytkownika usługi GitHub.
  • <registry-name> to istniejący rejestr kontenerów utworzony na potrzeby tego samouczka lub rejestr, którego można użyć.
  • <client-id> to wartość appId właściwości z poprzedniego az ad sp create-for-rbac polecenia. Identyfikator to identyfikator GUID formularza 000000000-0000-0000-0000-0000-00000000.
  • <tenant-id> to wartość tenant właściwości z poprzedniego az ad sp create-for-rbac polecenia. Identyfikator jest również identyfikatorem GUID podobnym do identyfikatora klienta.
  • <client-secret> to wartość password właściwości z poprzedniego az ad sp create-for-rbac polecenia.

W konfiguracji ciągłego wdrażania jednostka usługi służy do włączania funkcji GitHub Actions w celu uzyskiwania dostępu do zasobów platformy Azure i modyfikowania ich. Dostęp do zasobów jest ograniczony przez role przypisane do jednostki usługi. Jednostka usługi została przypisana wbudowaną rolę Współautor w grupie zasobów zawierającej aplikację kontenera.

Jeśli wykonano kroki portalu, jednostka usługi została automatycznie utworzona. Jeśli wykonano kroki interfejsu wiersza polecenia platformy Azure, jednostka usługi została jawnie utworzona 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 i potwierdzisz, że zmiana zostanie automatycznie wdrożona w witrynie internetowej.

Jeśli jeszcze tego nie zrobiono, utwórz rozwidlenie przykładowego repozytorium (Django lub Flask). Możesz wprowadzić zmianę kodu bezpośrednio w usłudze GitHub lub w środowisku deweloperskim z poziomu wiersza polecenia za pomocą usługi Git.

Krok 1. Przejdź do rozwidlenia przykładowego repozytorium i uruchom go w gałęzi głównej.

Screenshot showing a fork of the sample repo and starting in the main branch.

Krok 2. Wprowadzanie zmiany.

  • Przejdź do pliku /templates/base.html . (W przypadku platformy Django ścieżka to: restaurant_review/templates/restaurant_review/base.html).
  • Wybierz pozycję Edytuj i zmień frazę "Przegląd restauracji platformy Azure" na "Przegląd restauracji platformy Azure — ponowne wdrożenie".

Screenshot showing how to make a change in a template file in the fork of the sample repo.

Krok 3. Zatwierdź zmianę bezpośrednio w gałęzi głównej.

  • W dolnej części edytowanej strony wybierz przycisk Zatwierdź .
  • Zatwierdzenie rozpoczyna przepływ pracy funkcji GitHub Actions.

Screenshot showing how to commit a change in a template file in the fork of the sample repo.

Uwaga

Pokazaliśmy wprowadzenie zmiany bezpośrednio w gałęzi głównej. W typowych przepływach pracy oprogramowania wprowadzisz zmianę w gałęzi innej niż główna , a następnie utworzysz żądanie ściągnięcia, aby scalić te zmiany na główne. Żądania ściągnięcia również uruchamiają przepływ pracy.

Informacje o GitHub Actions

Wyświetlanie historii przepływu pracy

Krok 1. W usłudze GitHub przejdź do rozwidlenia przykładowego repozytorium i otwórz kartę Akcje .

Screenshot showing how to view GitHub Actions for a repo and look at workflows.

Klucze tajne przepływu pracy

W pliku .github/workflows/<workflow-name>.yml pliku przepływu pracy, który został dodany do repozytorium, zobaczysz symbole zastępcze poświadczeń wymaganych do zadań kompilacji i aktualizacji aplikacji kontenera przepływu pracy. Informacje o poświadczeniach są przechowywane w repozytorium Ustawienia w obszarze Wpisy tajne zabezpieczeń/i zmienne/Akcje.

Screenshot showing how to see where GitHub Actions secrets are stored in GitHub.

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ą generowane ponownie, musisz zaktualizować wartość REGISTRY_PASSWORD. Aby uzyskać więcej informacji, zobacz Zaszyfrowane wpisy tajne w dokumentacji usługi GitHub.

Aplikacje autoryzowane przez protokół OAuth

Podczas konfigurowania ciągłego wdrażania autoryzujesz usługę Azure Container Apps jako autoryzowaną aplikację OAuth dla konta usługi GitHub. Usługa Container Apps używa autoryzowanego dostępu do tworzenia pliku YML funkcji GitHub Actions w pliku .github/workflows/<workflow-name>.yml. Możesz wyświetlić autoryzowane aplikacje i odwołać uprawnienia w obszarze Aplikacje integracji/twojego konta.

Screenshot showing how to see the authorized apps for a user in GitHub.

Wskazówki dotyczące rozwiązywania problemów

Błędy podczas konfigurowania jednostki usługi za pomocą polecenia interfejsu wiersza polecenia az ad sp create-for-rba platformy Azure.

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

  • Aby sprawdzić stan przepływu pracy, przejdź do karty Akcje repozytorium.
  • Jeśli przepływ pracy zakończył się niepowodzeniem, przejdź do jego pliku przepływu pracy. Powinny istnieć dwa zadania "build" i "deploy". W przypadku zadania, które zakończyło się niepowodzeniem, zapoznaj się z danymi wyjściowymi zadań zadania podrzędnego, aby wyszukać problemy.
  • Jeśli zostanie wyświetlony komunikat o błędzie z limitem czasu uzgadniania protokołu TLS, uruchom przepływ pracy ręcznie, wybierając pozycję Wyzwalaj automatyczne wdrażanie na karcie Akcje repozytorium, 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/<workflow-name>.yml). Nie należy modyfikować tego pliku na potrzeby tego samouczka. Jeśli tak, przywróć zmiany i spróbuj użyć przepływu pracy.

Witryna internetowa nie wyświetla zmian scalonych w gałęzi głównej.

  • W usłudze GitHub: sprawdź, czy przepływ pracy funkcji GitHub Actions został uruchomiony i czy sprawdzono zmianę w gałęzi, która wyzwala przepływ pracy.
  • W witrynie Azure Portal: sprawdź usługę Azure Container Registry, aby sprawdzić, czy nowy obraz platformy Docker został utworzony przy użyciu znacznika czasu po zmianie gałęzi.
  • W witrynie Azure Portal: sprawdź dzienniki aplikacji kontenera. Jeśli wystąpi błąd programowania, zobaczysz go tutaj.
    • Przejdź do aplikacji kontenera | Zarządzanie poprawkami | <aktywny kontener> | Szczegóły poprawki | Dzienniki konsoli
    • Wybierz kolejność kolumn, aby wyświetlić wartości "Czas wygenerowany", "Stream_s" i "Log_s". Posortuj dzienniki według najnowszych elementów i poszukaj komunikatów stderr i stdout języka Python w kolumnie "Stream_s". Dane wyjściowe "print" języka Python będą komunikatami stdout .
  • Za pomocą interfejsu wiersza polecenia platformy Azure użyj polecenia az containerapp logs show .

Co się stanie, gdy rozłączę ciągłe wdrażanie?

  • Zatrzymanie ciągłego wdrażania oznacza odłączenie aplikacji kontenera od repozytorium. Aby odłączyć:

    • W witrynie Azure Portal przejdź do aplikacji kontenera, wybierz zasób Ciągłe wdrażanie , a następnie wybierz pozycję Rozłącz.
    • Za pomocą interfejsu wiersza polecenia platformy Azure użyj polecenia az container app github-action remove .
  • Po rozłączeniu w repozytorium GitHub:

    • Plik .github/workflows/<workflow-name>.yml zostanie usunięty z repozytorium.
    • Klucze tajne nie są usuwane.
    • Usługa Azure Container Apps pozostaje autoryzowaną aplikacją OAuth dla konta usługi GitHub.
  • Po rozłączeniu na platformie Azure:

    • Kontener jest pozostawiony z ostatnio wdrożonym kontenerem. Możesz ponownie połączyć aplikację kontenera z usługą Azure Container Registry, aby nowe poprawki kontenera pobierały najnowszy obraz.
    • Jednostki usługi utworzone i używane do ciągłego wdrażania nie są usuwane.

Następne kroki

Jeśli skończysz z samouczkiem 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. Przykład sposobu usuwania grup zasobów można znaleźć w temacie Containerize tutorial cleanup (Czyszczenie samouczka containerize).

Jeśli planujesz budować ten samouczek, poniżej przedstawiono kilka następnych kroków, które możesz wykonać.