Wdrażanie aplikacji internetowej w języku Python w usłudze GitHub Actions przy użyciu ciągłej integracji/ciągłego wdrażania w usłudze GitHub Actions w celu aplikacja systemu Azure Service w systemie Linux

Użyj platformy ciągłej integracji i ciągłego dostarczania (CI/CD) funkcji GitHub Actions, aby wdrożyć aplikację internetową w języku Python w celu aplikacja systemu Azure Service w systemie Linux. Przepływ pracy funkcji GitHub Actions automatycznie kompiluje kod i wdraża go w usłudze App Service za każdym razem, gdy istnieje zatwierdzenie w repozytorium. Możesz dodać inną automatyzację w przepływie pracy funkcji GitHub Actions, takim jak skrypty testowe, kontrole zabezpieczeń i wielostagestowe wdrożenie.

Tworzenie repozytorium dla kodu aplikacji

Jeśli masz już aplikację internetową w języku Python do użycia, upewnij się, że jest ona zatwierdzona w repozytorium GitHub.

Jeśli potrzebujesz aplikacji do pracy, możesz rozwidlić i sklonować repozytorium pod adresem https://github.com/Microsoft/python-sample-vscode-flask-tutorial. Kod pochodzi z samouczka platformy Flask w programie Visual Studio Code.

Uwaga

Jeśli aplikacja używa platformy Django i bazy danych SQLite, nie będzie działać w tym samouczku. Jeśli aplikacja Django używa oddzielnej bazy danych, takiej jak PostgreSQL, możesz jej użyć z tym samouczkiem. Aby uzyskać więcej informacji na temat platformy Django, zobacz zagadnienia dotyczące platformy Django w dalszej części tego artykułu.

Tworzenie docelowej usługi aplikacja systemu Azure

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ższych krokach użyjesz polecenia az webapp up , aby utworzyć usługę App Service i wykonać pierwsze wdrożenie aplikacji.

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

Krok 2. Otwórz interfejs wiersza polecenia platformy Azure, wybierając ikonę usługi Cloud Shell na pasku narzędzi portalu.

Screenshot showing how to open Azure Cloud Shell in Azure portal.

Krok 3. Z listy rozwijanej w usłudze Cloud Shell wybierz pozycję Bash.

Screenshot showing an Azure Cloud Shell Bash shell in Azure portal.

Krok 4. W usłudze Cloud Shell sklonuj repozytorium przy użyciu polecenia git clone. Jeśli na przykład używasz przykładowej aplikacji Platformy Flask, polecenie to:

git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git

Zastąp ciąg <github-user> nazwą konta usługi GitHub, na którym utworzono rozwidlenie repozytorium. Jeśli używasz innego repozytorium aplikacji, to repozytorium służy do konfigurowania funkcji GitHub Actions.

Uwaga

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 magazynu zawiera obraz systemu plików usługi Cloud Shell, który przechowuje sklonowane repozytorium. W przypadku tego magazynu jest niewielki koszt. Konto magazynu można usunąć na końcu tego artykułu wraz z innymi utworzonymi zasobami.

Napiwek

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

Krok 5. W usłudze Cloud Shell zmień katalog na folder repozytorium, który ma aplikację w języku Python, aby polecenie az webapp up rozpoznało aplikację jako python. Na przykład przykładowa aplikacja platformy Flask:

cd python-sample-vscode-flask-tutorial

Krok 6. W usłudze Cloud Shell użyj polecenia az webapp up , aby utworzyć usługę App Service i początkowo wdrożyć aplikację.

az webapp up --name <app-service-name> --runtime "PYTHON:3.9"

Określ nazwę usługi App Service, która jest unikatowa 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ą.

Użyj az webapp list-runtimes polecenia , aby uzyskać listę dostępnych środowisk uruchomieniowych. PYTHON|X.Y Użyj formatu , gdzie X.Y jest wersja języka Python.

Możesz również określić lokalizację usługi App Service za pomocą parametru --location . Użyj polecenia , az account list-locations --output table aby uzyskać listę dostępnych lokalizacji.

Krok 7. Jeśli aplikacja używa niestandardowego polecenia uruchamiania, użyj polecenia az webapp config użyj tego polecenia. Jeśli aplikacja nie ma niestandardowego polecenia uruchamiania, pomiń ten krok.

Na przykład aplikacja python-sample-vscode-flask-tutorial zawiera plik o nazwie startup.txt zawierający polecenie uruchamiania, którego można użyć w następujący sposób:

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

Nazwę grupy zasobów można znaleźć w danych wyjściowych z poprzedniego az webapp up polecenia. Nazwa grupy zasobów rozpocznie się od <azure-account-name>_rg_.

Krok 8. Aby wyświetlić uruchomioną aplikację, otwórz przeglądarkę i przejdź do http:// app-service-name.azurewebsites.net>.<

Jeśli zostanie wyświetlona strona ogólna, zaczekaj kilka sekund na uruchomienie usługi App Service i odśwież stronę. Jeśli strona ogólna będzie nadal widoczna, sprawdź, czy wdrożono je z odpowiedniego folderu. Jeśli na przykład używasz przykładowej aplikacji platformy Flask, folder to python-sample-vscode-flask-tutorial. Ponadto w przypadku przykładowej aplikacji Platformy Flask sprawdź, czy polecenie uruchamiania zostało poprawnie ustawione.

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

W poniższych krokach skonfigurujesz ciągłe wdrażanie (CD), co oznacza, że nowe wdrożenie kodu odbywa się po wyzwoleniu przepływu pracy. Wyzwalacz w tym samouczku to dowolna zmiana gałęzi głównej repozytorium, na przykład za pomocą żądania ściągnięcia (PR).

Krok 1. Dodaj akcję usługi GitHub za pomocą polecenia az webapp deployment github-actions add .

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, aby ukończyć uwierzytelnianie.

Jeśli istnieje plik przepływu pracy, który powoduje konflikt z nazwą używaną przez usługę App Service, zostanie wyświetlony monit o wybranie, czy zastąpić. Użyj parametru , --force aby zastąpić bez pytania.

Co robi polecenie add:

  • Tworzy nowy plik przepływu pracy: .github/workflows/<workflow-name.yml> w repozytorium. Nazwa pliku będzie zawierać nazwę usługi App Service.
  • Pobiera profil publikowania z wpisami tajnymi dla usługi App Service i dodaje go jako wpis tajny akcji usługi GitHub. Nazwa wpisu tajnego rozpocznie się od AZUREAPPSERVICE_PUBLISHPROFILE_. Ten wpis tajny jest przywołyny w pliku przepływu pracy.

Krok 2. Uzyskaj szczegółowe informacje o konfiguracji wdrożenia kontroli źródła za pomocą polecenia az webapp deployment source show .

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 repoUrl i branch . Te wartości powinny być zgodne z wartościami określonymi w poprzednim kroku.

Objaśniono przepływ pracy i akcje usługi GitHub

Przepływ pracy jest definiowany przez plik YAML (yml) w ścieżce /.github/workflows/ w repozytorium. Ten plik YAML zawiera różne kroki i parametry tworzące 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. Każde zadanie z kolei jest zestawem kroków. Na koniec każdy krok jest skryptem powłoki lub akcją.

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

Akcja opis
Checkout Zapoznaj się z repozytorium w module uruchamiającym, agencie funkcji GitHub Actions.
setup-python Zainstaluj język Python w module uruchamiającym.
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 wyzwalany dla zdarzeń wypychania do określonej 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 jest wyzwalany na 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ę aplikacja systemu Azure jako autoryzowaną aplikację OAuth dla konta usługi GitHub. Usługa App Service używa autoryzowanego dostępu do tworzenia pliku YML akcji usługi GitHub w pliku .github/workflows/<workflow-name.yml>. Możesz wyświetlić autoryzowane aplikacje i odwołać uprawnienia w ramach kont usługi GitHub Ustawienia w obszarze Integracje/aplikacje.

Screenshot showing how to view authorized OAuth Apps for a GitHub account.

Wpis tajny profilu publikowania przepływu pracy

W pliku przepływu pracy .github/workflows/<workflow-name.yml>, który został dodany do repozytorium, zobaczysz symbol zastępczy poświadczeń profilu publikowania, które są potrzebne do zadania wdrażania przepływu pracy. Informacje o profilu publikowania są przechowywane zaszyfrowane w repozytorium Ustawienia w obszarze Zabezpieczenia/akcje.

Screenshot showing how to view action secrets in GitHub.

W tym artykule akcja usługi GitHub uwierzytelnia się przy użyciu poświadczeń profilu publikowania. Istnieją inne sposoby uwierzytelniania, takie jak za pomocą jednostki usługi lub Połączenie OpenID. Aby uzyskać więcej informacji, zobacz Wdrażanie w usłudze App Service przy użyciu funkcji GitHub Actions.

Uruchom przepływ pracy

Teraz przetestujesz przepływ pracy, wprowadzając zmianę w repozytorium.

Krok 1. Przejdź do rozwidlenia przykładowego repozytorium (lub użytego repozytorium) i wybierz gałąź ustawioną jako część wyzwalacza.

Screenshot showing how to go to the repo and branch where the GitHub Actions workflow is defined.

Krok 2. Wprowadź niewielką zmianę.

Jeśli na przykład użyto samouczka platformy VS Code Flask, możesz

  • Przejdź do pliku /hello-app/templates/home.html gałęzi wyzwalacza.
  • Wybierz pozycję Edytuj i dodaj tekst "Ponownie wdrożono!".

Krok 3. Zatwierdź zmianę bezpośrednio w gałęzi, w której pracujesz.

  • W prawym górnym rogu edytowanej strony wybierz przycisk Zatwierdź zmiany ... . Zostanie otwarte okno Zatwierdź zmiany . W oknie Zatwierdzanie zmian zmodyfikuj komunikat zatwierdzenia w razie potrzeby, a następnie wybierz przycisk Zatwierdź zmiany.
  • Zatwierdzenie rozpoczyna przepływ pracy funkcji GitHub Actions.

Możesz również ręcznie uruchomić przepływ pracy.

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

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

Rozwiązywanie problemów z przepływem pracy, który zakończył się niepowodzeniem

Aby sprawdzić stan przepływu pracy, przejdź do karty Akcje repozytorium. Podczas przechodzenia do szczegółów pliku przepływu pracy utworzonego w tym samouczku zobaczysz dwa zadania "build" i "deploy". W przypadku zadania, które zakończyło się niepowodzeniem, zapoznaj się z danymi wyjściowymi zadań podrzędnych pod kątem wskazania błędu. Typowe problemy to:

  • 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 przy użyciu az webapp up polecenia, jak pokazano w tym artykule.

  • Jeśli aprowizowano usługę app Service za pośrednictwem portalu, ustawienie akcji kompilacji SCM_DO_BUILD_DURING_DEPLOYMENT mogło nie zostać ustawione. To ustawienie musi być ustawione na truewartość . Polecenie az webapp up automatycznie ustawia akcję kompilacji.

  • 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, plik przepływu pracy (.github/workflows/<workflow-name.yml>) zostanie utworzony automatycznie. Jeśli go zmodyfikowano, usuń modyfikacje, aby sprawdzić, czy powodują one awarię.

Uruchamianie skryptu po wdrożeniu

Skrypt po wdrożeniu może na przykład definiować zmienne środowiskowe oczekiwane przez kod aplikacji. Dodaj skrypt jako część kodu aplikacji i wykonaj go przy użyciu polecenia uruchamiania.

Aby uniknąć twardych wartości zmiennych kodowania w pliku YML przepływu pracy, możesz je zamiast tego użyć w interfejsie internetowym usługi GitHub, a następnie odwołać się do nazwy zmiennej w skrycie. Zaszyfrowane wpisy tajne można tworzyć dla repozytorium lub dla środowiska (repozytorium kont). Aby uzyskać więcej informacji, zobacz Zaszyfrowane wpisy tajne w witrynie GitHub Docs.

Zagadnienia dotyczące platformy Django

Jak wspomniano wcześniej w tym artykule, możesz użyć funkcji GitHub Actions do wdrażania aplikacji Django w usłudze aplikacja systemu Azure 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, uniemożliwiając odczyty i zapisy. To zachowanie nie ma wpływu na zewnętrzną bazę danych.

Zgodnie z opisem w artykule Konfigurowanie aplikacji języka Python w usłudze App Service — proces uruchamiania kontenera usługa App Service automatycznie wyszukuje plik wsgi.py w kodzie aplikacji, który zazwyczaj 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 fragment kodu pokazuje, jak określić polecenie uruchamiania w pliku przepływu pracy:

startup-command: startup.txt

W przypadku korzystania z platformy Django zazwyczaj chcesz przeprowadzić migrację modeli danych przy użyciu python manage.py migrate polecenia po wdrożeniu kodu aplikacji. Możesz uruchomić polecenie migracji w skry skrycie po wdrożeniu.

Rozłączanie funkcji GitHub Actions

Odłączenie funkcji GitHub Actions od 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, czy zapisać lub usunąć plik.

Odłącz funkcję GitHub Actions za pomocą polecenia az webapp deployment github-actions remove interfejsu wiersza polecenia platformy Azure.

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

Czyszczenie zasobów

Aby uniknąć naliczania opłat w zasobach platformy Azure utworzonych w tym samouczku, usuń grupę zasobów zawierającą usługę 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>

Aby usunąć konto magazynu, które utrzymuje system plików dla usługi Cloud Shell, co spowoduje 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 istnieją inni użytkownicy, możesz usunąć konto magazynu w grupie zasobów.

Jeśli grupa zasobów platformy Azure została usunięta, rozważ również wprowadzenie następujących modyfikacji do konta usługi GitHub i repozytorium połączonego z ciągłym wdrażaniem:

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