Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Istniejąca aplikacja: aby użyć istniejącej aplikacji internetowej w języku Python, upewnij się, że aplikacja jest zatwierdzona w repozytorium GitHub.
Nowa aplikacja: jeśli potrzebujesz nowej aplikacji internetowej Python, możesz rozgałęzić i sklonować https://github.com/Microsoft/python-sample-vscode-flask-tutorial repozytorium GitHub. Przykładowy kod obsługuje samouczek platformy Flask w programie Visual Studio Code i zapewnia działającą aplikację w języku Python.
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.
Zaloguj się do witryny Azure Portal pod adresem https://portal.azure.com.
Otwórz interfejs wiersza polecenia platformy Azure, wybierając opcję Cloud Shell na pasku narzędzi portalu:
W usłudze Cloud Shell wybierz opcję Bash z menu rozwijanego:
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.gitJeś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ś.
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-tutorialW 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órymX.Yjest 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żyjaz account list-locations --output tablepolecenia .
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.txtPodaj 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 poprzedniegoaz webapp uppolecenia. Nazwa grupy zasobów zawiera nazwę konta platformy Azure, po której następuje sufiks _rg , jak w polu <azure-account-name>_rg_.
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.netJeś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).
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.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-githubParametr
--login-with-githubuż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
--forcez poleceniem , aby automatycznie zastąpić wszystkie powodujące konflikt przepływy pracy.
Polecenie
addwykonuje 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.
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>W danych wyjściowych polecenia potwierdź wartości właściwości
repoUrlibranch. Te wartości powinny być zgodne z wartościami określonymi zaaddpomocą 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:
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:
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.
W przeglądarce przejdź do rozwidlenia przykładowego repozytorium (lub użytego repozytorium) i wybierz gałąź ustawioną jako część wyzwalacza:
Wprowadź niewielką zmianę w aplikacji internetowej w języku Python.
W samouczku platformy Flask przedstawiono prostą zmianę:
- Przejdź do pliku /hello-app/templates/home.html w gałęzi wyzwalacza.
- Wybierz pozycję Edytuj (ołówek).
- W edytorze znajdź instrukcję print
<p>i dodaj tekst "Ponownie wdrożono!"
Zatwierdź zmianę bezpośrednio w gałęzi, w której pracujesz.
- W edytorze wybierz pozycję Zatwierdź zmiany w prawym górnym rogu. Zostanie otwarte okno Zatwierdź zmiany .
- 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.
Przejdź do karty Akcje repozytorium skonfigurowanego na potrzeby ciągłego wdrażania.
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 uppolecenia, jak pokazano w tym artykule.Jeśli aprovisionowano usługę App Service za pośrednictwem portalu, akcja kompilacji
SCM_DO_BUILD_DURING_DEPLOYMENTmoże nie być ustawiona. To ustawienie musi być ustawione natrue. Polecenieaz webapp upautomatycznie 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.