Udostępnij za pomocą


Wdrażanie aplikacji internetowych w języku Python w usłudze App Service przy użyciu funkcji GitHub Actions (Linux)

W tym artykule opisano sposób wdrażania aplikacji internetowej w języku Python w usłudze Azure App Service w systemie Linux przy użyciu platformy ciągłej integracji i ciągłego dostarczania (CI/CD). Przepływ pracy GitHub Actions automatycznie kompiluje kod i wdraża go w wystąpieniu usługi App Service za każdym razem, gdy nastąpi zakomit do repozytorium. Możesz dodać dodatkową automatyzację w przepływie pracy GitHub Actions, takie jak skrypty testowe, kontrole zabezpieczeń i wielostopniowe wdrożenie.

Tworzenie repozytorium dla kodu aplikacji

Aby wykonać procedury opisane w tym artykule, potrzebna jest aplikacja internetowa języka Python zatwierdzona w repozytorium GitHub.

Uwaga / Notatka

Jeśli aplikacja używa platformy Django i bazy danych SQLite , nie będzie działać w przypadku tych procedur. SqLite nie jest obsługiwana w większości środowisk hostowanych w chmurze ze względu na ograniczenia magazynu lokalnego opartego na plikach. Rozważ przełączenie do bazy danych zgodnej z chmurą, takiej jak PostgreSQL lub Azure Cosmos DB. Aby uzyskać więcej informacji, zobacz Przegląd zagadnień dotyczących platformy Django w dalszej części tego artykułu.

Tworzenie wystąpienia docelowego usługi App Service

Najszybszym sposobem utworzenia wystąpienia usługi App Service jest użycie interfejsu wiersza polecenia platformy Azure za pośrednictwem interaktywnej usługi Azure Cloud Shell. Usługa Cloud Shell obejmuje usługę Git i interfejs wiersza polecenia platformy Azure. W poniższej procedurze użyjesz polecenia az webapp up , aby utworzyć wystąpienie usługi App Service i wykonać początkowe wdrożenie aplikacji.

  1. Zaloguj się do witryny Azure Portal pod adresem https://portal.azure.com.

  2. Otwórz interfejs wiersza polecenia platformy Azure, wybierając opcję Cloud Shell na pasku narzędzi portalu:

    Zrzut ekranu przedstawiający sposób otwierania usługi Azure Cloud Shell przy użyciu akcji ikony na pasku narzędzi witryny Azure Portal.

  3. W usłudze Cloud Shell wybierz opcję Bash z menu rozwijanego:

    Zrzut ekranu pokazujący, jak wybrać opcję Bash w Cloud Shell.

  4. W usłudze Cloud Shell sklonuj repozytorium przy użyciu polecenia git clone .

    Wskazówka

    Aby wkleić polecenia lub tekst do usługi Cloud Shell, użyj skrótu klawiaturowego Ctrl+Shift+V lub kliknij prawym przyciskiem myszy i wybierz polecenie Wklej z menu kontekstowego.

    • W przypadku przykładowej aplikacji Platformy Flask możesz użyć następującego polecenia. Zastąp <github-user> część nazwą konta usługi GitHub, na którym utworzono rozwidlenie repozytorium:

      git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
      
    • Jeśli aplikacja znajduje się w innym repozytorium, skonfiguruj funkcję GitHub Actions dla określonego repozytorium. Zastąp część <github-user> nazwą konta na GitHubie, na którym utworzono fork repozytorium, a w symbolu zastępczym <repo-name> podaj rzeczywistą nazwę repozytorium.

      git clone https://github.com/<github-user>/<repo-name>.git
      

    Uwaga / Notatka

    Usługa Cloud Shell jest wspierana przez konto usługi Azure Storage w grupie zasobów o nazwie cloud-shell-storage-your-region<>. To konto magazynowe zawiera obraz systemu plików Cloud Shell, który przechowuje sklonowane repozytorium. Za to przechowywanie trzeba uiścić niewielką opłatę. Po ukończeniu tego artykułu możesz usunąć konto magazynowe wraz z innymi zasobami, które utworzyłeś.

  5. W usłudze Cloud Shell zmień katalog na folder repozytorium aplikacji języka Python, aby polecenie az webapp up rozpoznawało aplikację jako język Python. W przypadku przykładowej aplikacji Platformy Flask użyj następującego polecenia:

    cd python-sample-vscode-flask-tutorial
    
  6. W usłudze Cloud Shell użyj polecenia az webapp up , aby utworzyć wystąpienie usługi App Service i wykonać początkowe wdrożenie aplikacji:

    az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
    
    • W przypadku symbolu zastępczego <app-service-name> określ unikatową nazwę usługi App Service na platformie Azure. Nazwa musi mieć długość od 3 do 60 znaków i może zawierać tylko litery, cyfry i łączniki. Nazwa musi zaczynać się literą i kończyć literą lub cyfrą.

    • Aby uzyskać listę dostępnych środowisk uruchomieniowych w systemie, użyj polecenia az webapp list-runtimes.

    • Po wprowadzeniu wartości czasu wykonywania w poleceniu użyj formatu PYTHON:X.Y, w którym X.Y jest główną i pomocniczą wersją Pythona.

    • Możesz również określić lokalizację regionu wystąpienia usługi App Service przy użyciu parametru --location . Aby uzyskać listę dostępnych lokalizacji, użyj az account list-locations --output table polecenia .

  7. Jeśli aplikacja ma niestandardowy skrypt uruchamiania, użyj polecenia az webapp config , aby zainicjować skrypt.

    • Jeśli aplikacja nie ma niestandardowego skryptu uruchamiania, przejdź do następnego kroku.

    • W przypadku przykładowej aplikacji Platformy Flask musisz uzyskać dostęp do skryptu uruchamiania w pliku startup.txt , uruchamiając następujące polecenie:

      az webapp config set \
         --resource-group <resource-group-name> \
         --name <app-service-name> \
         --startup-file startup.txt
      

      Podaj nazwę grupy zasobów i nazwę wystąpienia App Service w miejscach <resource-group-name> i <app-service-name>. Aby znaleźć nazwę grupy zasobów, sprawdź dane wyjściowe z poprzedniego az webapp up polecenia. Nazwa grupy zasobów zawiera nazwę konta platformy Azure, po której następuje sufiks _rg , jak w polu <azure-account-name>_rg_.

  8. Aby wyświetlić uruchomioną aplikację, otwórz przeglądarkę i przejdź do punktu końcowego wdrożenia dla wystąpienia usługi App Service. W poniższym adresie URL zastąp symbol zastępczy <app-service-name> nazwą wystąpienia usługi App Service.

    http://<app-service-name>.azurewebsites.net
    

    Jeśli zostanie wyświetlona strona ogólna, zaczekaj kilka sekund na uruchomienie wystąpienia usługi App Service i odśwież stronę.

    • Jeśli nadal widzisz stronę ogólną, upewnij się, że wdrożono z odpowiedniego folderu.
    • W przypadku przykładowej aplikacji Platformy Flask potwierdź wdrożenie z folderu python-sample-vscode-flask-tutorial . Sprawdź również, czy polecenie uruchamiania zostało poprawnie ustawione.

Konfiguracja ciągłego wdrażania w usłudze App Service

W następnej procedurze skonfigurujesz ciągłe dostarczanie (CD), co oznacza, że nowe wdrożenie kodu odbywa się za każdym razem, gdy przepływ pracy zostaje uruchomiony. Wyzwalacz w przykładzie artykułu to dowolna zmiana gałęzi głównej repozytorium, taka jak wniosek o połączenie (PR).

  1. W usłudze Cloud Shell upewnij się, że jesteś w katalogu głównym systemu (~), a nie w podfolderze aplikacji, takim jak python-sample-vscode-flask-tutorial.

  2. Dodaj funkcję GitHub Actions za pomocą polecenia az webapp deployment github-actions add . Zastąp wszystkie symbole zastępcze określonymi wartościami:

    az webapp deployment github-actions add \
      --repo "<github-user>/<github-repo>" \
      --resource-group <resource-group-name> \
      --branch <branch-name> \
      --name <app-service-name> \
      --login-with-github
    
    • Parametr --login-with-github używa metody interaktywnej do pobierania osobistego tokenu dostępu. Postępuj zgodnie z monitami i ukończ uwierzytelnianie.

    • Jeśli system napotka istniejący plik przepływu pracy o tej samej nazwie wystąpienia usługi App Service, postępuj zgodnie z monitami, aby wybrać, czy zastąpić przepływ pracy. Możesz użyć parametru --force z poleceniem , aby automatycznie zastąpić wszystkie powodujące konflikt przepływy pracy.

    Polecenie add wykonuje następujące zadania:

    • Tworzy nowy plik przepływu pracy w ścieżce .github/workflows/<workflow-name>.yml w repozytorium. Nazwa pliku zawiera nazwę wystąpienia usługi App Service.
    • Pobiera profil publikacji zawierający tajne wpisy dla wystąpienia usługi App Service i dodaje go jako tajny zapis akcji GitHub. Nazwa wpisu tajnego zaczyna się od AZUREAPPSERVICE_PUBLISHPROFILE_. Ten sekret jest przywoływany w pliku przepływu pracy.
  3. Uzyskaj szczegółowe informacje o konfiguracji wdrożenia kontroli źródła za pomocą polecenia az webapp deployment source show . Zastąp parametry symbolu zastępczego określonymi wartościami:

    az webapp deployment source show \
      --name <app-service-name> \
      --resource-group <resource-group-name>
    
  4. W danych wyjściowych polecenia potwierdź wartości właściwości repoUrl i branch . Te wartości powinny być zgodne z wartościami określonymi za add pomocą polecenia .

Badanie przepływu pracy i akcji usługi GitHub

Definicja przepływu pracy jest określona w pliku YAML (.yml) w ścieżce /.github/workflows/ w repozytorium. Ten plik YAML zawiera różne kroki i parametry, które składają się na przepływ pracy, zautomatyzowany proces skojarzony z repozytorium GitHub. Możesz tworzyć, testować, pakować, wydać i wdrażać dowolny projekt w usłudze GitHub za pomocą przepływu pracy.

Każdy przepływ pracy składa się z co najmniej jednego zadania, a każde zadanie jest zestawem kroków. Każdy krok jest skryptem powłoki lub akcją. Każde zadanie zawiera sekcję Akcja w pliku przepływu pracy.

Jeśli chodzi o przepływ pracy skonfigurowany przy użyciu kodu w języku Python na potrzeby wdrożenia w usłudze Azure App Service, przepływ pracy ma następujące akcje:

Akcja Opis
kasa Zapoznaj się z repozytorium w runnerze, agencie GitHub Actions.
setup-python Zainstaluj Pythona na runnerze.
appservice-build Skompiluj aplikację internetową.
webapps-deploy Wdróż aplikację internetową przy użyciu poświadczeń profilu publikowania w celu uwierzytelnienia na platformie Azure. Poświadczenie jest przechowywane w kluczu tajnym usługi GitHub.

Szablon przepływu pracy używany do tworzenia przepływu pracy to Azure/actions-workflow-samples.

Przepływ pracy jest uruchamiany podczas zdarzeń push do wskazanej gałęzi. Zdarzenie i gałąź są definiowane na początku pliku przepływu pracy. Na przykład poniższy fragment kodu pokazuje, że przepływ pracy uruchamia się przy zdarzeniach wypychania do gałęzi głównej:

on:
  push:
    branches:
    - main

Aplikacje autoryzowane przez protokół OAuth

Podczas konfigurowania ciągłego wdrażania autoryzujesz usługę Azure App Service jako autoryzowaną aplikację OAuth dla konta usługi GitHub. Usługa App Service używa autoryzowanego dostępu do tworzenia pliku YAML dla GitHub Actions w ścieżce .github/workflows/<workflow-name>.yml w repozytorium.

Aby wyświetlić autoryzowane aplikacje i odwołać uprawnienia w ramach kont usługi GitHub, przejdź do> pozycjiUstawienia Integrations/Applications:

Zrzut ekranu przedstawiający sposób wyświetlania autoryzowanych aplikacji OAuth dla konta usługi GitHub.

Tajny profil publikowania w przepływie pracy

W pliku przepływu pracy .github/workflows/<workflow-name>.yml dodanym do repozytorium znajduje się symbol zastępczy dla poświadczeń profilu publikacji wymaganych do zadań wdrożeniowych w ramach przepływu pracy. Informacje o profilu publikowania są przechowywane zaszyfrowane w repozytorium.

Aby wyświetlić sekrety, przejdź do Ustawienia>Zabezpieczenia>Sekrety i zmienne>Akcje:

Zrzut ekranu przedstawiający sposób wyświetlania sekretów akcji dla repozytorium w GitHubie.

W tym artykule akcja GitHub uwierzytelnia się przy użyciu profilu publikacji. Istnieją inne sposoby uwierzytelniania, takie jak za pomocą głównej usługi lub OpenID Connect. Aby uzyskać więcej informacji, zobacz Wdrażanie w usłudze App Service przy użyciu funkcji GitHub Actions.

Uruchamianie i testowanie przepływu pracy

Ostatnim krokiem jest przetestowanie przepływu pracy przez wprowadzenie zmiany w repozytorium.

  1. W przeglądarce przejdź do rozwidlenia przykładowego repozytorium (lub użytego repozytorium) i wybierz gałąź ustawioną jako część wyzwalacza:

    Zrzut ekranu przedstawiający sposób przechodzenia do repozytorium i gałęzi, w której zdefiniowano przepływ pracy funkcji GitHub Actions.

  2. Wprowadź niewielką zmianę w aplikacji internetowej w języku Python.

    W samouczku platformy Flask przedstawiono prostą zmianę:

    1. Przejdź do pliku /hello-app/templates/home.html w gałęzi wyzwalacza.
    2. Wybierz pozycję Edytuj (ołówek).
    3. W edytorze znajdź instrukcję print <p> i dodaj tekst "Ponownie wdrożono!"
  3. Zatwierdź zmianę bezpośrednio w gałęzi, w której pracujesz.

    1. W edytorze wybierz pozycję Zatwierdź zmiany w prawym górnym rogu. Zostanie otwarte okno Zatwierdź zmiany .
    2. W oknie Zatwierdzanie zmian zmodyfikuj komunikat zatwierdzenia zgodnie z potrzebami i wybierz pozycję Zatwierdź zmiany.

    Proces zatwierdzania wyzwala przepływ pracy funkcji GitHub Actions.

Również można wyzwolić przepływ pracy ręcznie.

  1. Przejdź do karty Akcje repozytorium skonfigurowanego na potrzeby ciągłego wdrażania.

  2. Wybierz przepływ pracy na liście przepływów pracy, a następnie wybierz pozycję Uruchom przepływ pracy.

Rozwiązywanie niepowodzeń przepływu pracy

Stan przepływu pracy można sprawdzić na karcie Akcje dla repozytorium aplikacji. Podczas badania pliku przepływu pracy utworzonego w tym artykule zostaną wyświetlone dwa zadania: kompilowanie i wdrażanie. Przypominamy, że przepływ pracy jest oparty na szablonie Azure/actions-workflow-samples .

W przypadku zadania, które zakończyło się niepowodzeniem, zapoznaj się z danymi wyjściowymi zadań, aby znaleźć informację o niepowodzeniu.

Poniżej przedstawiono niektóre typowe problemy do zbadania:

  • Jeśli aplikacja nie powiedzie się z powodu braku zależności, plik requirements.txt nie został przetworzony podczas wdrażania. To zachowanie występuje, jeśli aplikacja internetowa została utworzona bezpośrednio w portalu, a nie za pomocą az webapp up polecenia, jak pokazano w tym artykule.

  • Jeśli aprovisionowano usługę App Service za pośrednictwem portalu, akcja kompilacji SCM_DO_BUILD_DURING_DEPLOYMENT może nie być ustawiona. To ustawienie musi być ustawione na true. Polecenie az webapp up automatycznie ustawia akcję kompilacji.

  • Jeśli zostanie wyświetlony komunikat o błędzie dotyczący limitu czasu uzgadniania protokołu TLS, uruchom przepływ pracy ręcznie, wybierając pozycję Wyzwalaj automatyczne wdrażanie na karcie Akcje repozytorium aplikacji. Możesz określić, czy problem z limitem czasu jest przejściowy.

  • Jeśli skonfigurujesz ciągłe wdrażanie aplikacji kontenera, jak pokazano w tym artykule, początkowy plik przepływu pracy .github/workflows/<workflow-name>.yml zostanie utworzony automatycznie. Jeśli plik został zmodyfikowany, usuń modyfikacje, aby sprawdzić, czy powodują one awarię.

Uruchamianie skryptu po wdrożeniu

Skrypt po wdrożeniu może wykonać kilka zadań, takich jak definiowanie zmiennych środowiskowych oczekiwanych przez kod aplikacji. Skrypt można dodać jako część kodu aplikacji i wykonać skrypt przy użyciu polecenia uruchamiania.

Aby uniknąć twardego kodowania wartości zmiennych w pliku YAML workflowu, rozważ skonfigurowanie zmiennych w usłudze GitHub i odwołanie się do nazw zmiennych w skrypcie. Zaszyfrowane wpisy tajne można tworzyć dla repozytorium lub dla środowiska (repozytorium kont). Aby uzyskać więcej informacji, zobacz Używanie sekretów w funkcji GitHub Actions.

Zapoznaj się z zagadnieniami dotyczącymi języka Django

Jak wspomniano wcześniej w tym artykule, możesz użyć funkcji GitHub Actions do wdrażania aplikacji Django w usłudze Azure App Service w systemie Linux, jeśli używasz oddzielnej bazy danych. Nie można użyć bazy danych SQLite, ponieważ usługa App Service blokuje plik db.sqlite3 , co uniemożliwia odczyty i zapisy. To zachowanie nie ma wpływu na zewnętrzną bazę danych.

W artykule Konfigurowanie aplikacji języka Python w usłudze App Service — proces uruchamiania kontenera opisano, jak usługa App Service automatycznie wyszukuje plik wsgi.py w kodzie aplikacji, który zwykle zawiera obiekt aplikacji. Gdy użyto webapp config set polecenia w celu ustawienia polecenia uruchamiania, użyto --startup-file parametru w celu określenia pliku zawierającego obiekt aplikacji. Polecenie webapp config set nie jest dostępne w akcji webapps-deploy. Zamiast tego można użyć parametru startup-command , aby określić polecenie uruchamiania. Na przykład poniższy kod pokazuje, jak określić polecenie uruchamiania w pliku przepływu pracy:

startup-command: startup.txt

W przypadku korzystania z platformy Django zazwyczaj chcesz migrować modele danych przy użyciu python manage.py migrate polecenia po wdrożeniu kodu aplikacji. Możesz uruchomić polecenie migracji w skrypcie po wdrożeniu.

Rozłączanie funkcji GitHub Actions

Odłączenie funkcji GitHub Actions od wystąpienia usługi App Service umożliwia ponowne skonfigurowanie wdrożenia aplikacji. Możesz wybrać, co się stanie z plikiem przepływu pracy po rozłączeniu i czy chcesz zapisać lub usunąć plik.

Odłącz GitHub Actions korzystając z polecenia Azure CLI az webapp deployment github-actions remove. Zastąp wszystkie symbole zastępcze określonymi wartościami:

az webapp deployment github-actions remove \
  --repo "<github-username>/<github-repo>" \
  --resource-group <resource-group-name> \
  --branch <branch-name> \
  --name <app-service-name> \
  --login-with-github

Uprzątnij zasoby

Aby uniknąć naliczania opłat za zasoby platformy Azure utworzone w tym artykule, usuń grupę zasobów zawierającą wystąpienie usługi App Service i plan usługi App Service.

W dowolnym miejscu, w którym zainstalowano interfejs wiersza polecenia platformy Azure, w tym usługę Azure Cloud Shell, możesz użyć polecenia az group delete , aby usunąć grupę zasobów:

az group delete --name <resource-group-name>

Usuwanie konta magazynu

Aby usunąć konto magazynu, które utrzymuje system plików usługi Cloud Shell i powoduje naliczanie niewielkiej miesięcznej opłaty, usuń grupę zasobów rozpoczynającą się od cloud-shell-storage-. Jeśli jesteś jedynym użytkownikiem grupy, możesz bezpiecznie usunąć grupę zasobów. Jeśli są inni użytkownicy, możesz usunąć konto pamięci masowej w grupie zasobów.

Aktualizowanie konta i repozytorium GitHub

Jeśli usuniesz grupę zasobów platformy Azure, rozważ wprowadzenie następujących modyfikacji do konta usługi GitHub i repozytorium połączonego na potrzeby ciągłego wdrażania:

  • W repozytorium aplikacji usuń plik .github/workflows/<workflow-name>.yml .
  • W ustawieniach repozytorium aplikacji usuń klucz tajny AZUREAPPSERVICE_PUBLISHPROFILE_ utworzony dla przepływu pracy.
  • W ustawieniach konta usługi GitHub usuń usługę Azure App Service jako autoryzowaną aplikację Oauth dla konta usługi GitHub.