Použití CI/CD s GitHub Actions k nasazení webové aplikace v Pythonu do služby Aplikace Azure Service v Linuxu

K nasazení webové aplikace v Pythonu do služby Aplikace Azure Service v Linuxu použijte platformu kontinuální integrace a průběžného doručování (CI/CD). Pracovní postup GitHub Actions automaticky sestaví kód a nasadí ho do služby App Service, kdykoli dojde k potvrzení do úložiště. Do pracovního postupu GitHub Actions můžete přidat další automatizaci, jako jsou testovací skripty, kontroly zabezpečení a nasazení s více úlohami.

Vytvoření úložiště pro kód aplikace

Pokud už máte webovou aplikaci v Pythonu, která se má použít, ujistěte se, že je potvrzená do úložiště GitHub.

Pokud potřebujete aplikaci pro práci, můžete vytvořit fork a naklonovat úložiště na adrese https://github.com/Microsoft/python-sample-vscode-flask-tutorial. Kód pochází z kurzu Flask v editoru Visual Studio Code.

Poznámka:

Pokud vaše aplikace používá Django a databázi SQLite, nebude v tomto kurzu fungovat. Pokud vaše aplikace Django používá samostatnou databázi, jako je PostgreSQL, můžete ji použít v tomto kurzu. Další informace o Django naleznete v tématu Důležité informace o Django dále v tomto článku.

Vytvoření cílové služby Aplikace Azure

Nejrychlejší způsob, jak vytvořit instanci služby App Service, je použít rozhraní příkazového řádku Azure (CLI) prostřednictvím interaktivní služby Azure Cloud Shell. Cloud Shell zahrnuje Git a Azure CLI. V následujících krocích použijete az webapp až k vytvoření služby App Service a k prvnímu nasazení aplikace.

Krok 1. Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.

Krok 2. Otevřete Azure CLI výběrem ikony Cloud Shellu na panelu nástrojů portálu.

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

Krok 3. V Cloud Shellu v rozevíracím seznamu vyberte Bash.

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

Krok 4. V Cloud Shellu naklonujte úložiště pomocí git cloneu. Pokud například používáte ukázkovou aplikaci Flask, příkaz je:

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

Nahraďte <uživatele githubu> názvem účtu GitHub, ve kterém jste úložiště rozvětvovali. Pokud používáte jiné úložiště aplikací, toto úložiště je místo, kde nastavíte GitHub Actions.

Poznámka:

Cloud Shell je podporován účtem Azure Storage ve skupině prostředků s názvem cloud-shell-storage-your-region><. Tento účet úložiště obsahuje image systému souborů Cloud Shellu, která ukládá klonované úložiště. Pro toto úložiště jsou malé náklady. Účet úložiště můžete odstranit na konci tohoto článku spolu s dalšími prostředky, které vytvoříte.

Tip

Pokud chcete vložit do Cloud Shellu, použijte kombinaci kláves Ctrl+Shift+V nebo klikněte pravým tlačítkem myši a v místní nabídce vyberte Vložit.

Krok 5. V Cloud Shellu změňte adresář do složky úložiště, ve které je vaše aplikace v Pythonu, aby příkaz az webapp up aplikaci rozpoznal jako Python. Příklad ukázkové aplikace Flask:

cd python-sample-vscode-flask-tutorial

Krok 6. V Cloud Shellu pomocí příkazu az webapp up vytvořte službu App Service a nejprve nasaďte aplikaci.

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

Zadejte název služby App Service, který je v Azure jedinečný. Název musí mít délku 3 až 60 znaků a může obsahovat jenom písmena, číslice a pomlčky. Název musí začínat písmenem a končit písmenem nebo číslem.

Slouží az webapp list-runtimes k získání seznamu dostupných modulů runtime. PYTHON|X.Y Použijte formát, kde X.Y je verze Pythonu.

Pomocí parametru --location můžete také zadat umístění služby App Service. az account list-locations --output table Pomocí příkazu získáte seznam dostupných umístění.

Krok 7. Pokud vaše aplikace používá vlastní spouštěcí příkaz, použijte příkaz az webapp config . Pokud vaše aplikace nemá vlastní spouštěcí příkaz, přeskočte tento krok.

Například aplikace python-sample-vscode-flask-tutorial obsahuje soubor s názvem startup.txt , který obsahuje spouštěcí příkaz, který můžete použít následujícím způsobem:

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

Název skupiny prostředků najdete ve výstupu z předchozího az webapp up příkazu. Název skupiny prostředků začne názvem <azure-account-name>_rg_.

Krok 8. Pokud chcete zobrazit spuštěnou aplikaci, otevřete prohlížeč a přejděte na http://< název>_služby.azurewebsites.net.

Pokud se zobrazí obecná stránka, počkejte několik sekund, než se služba App Service spustí, a aktualizujte stránku. Pokud se zobrazí obecná stránka, zkontrolujte, že jste ji nasadili ze správné složky. Pokud například používáte ukázkovou aplikaci Flask, složka je python-sample-vscode-flask-tutorial. Také u ukázkové aplikace Flask zkontrolujte, jestli jste správně nastavili spouštěcí příkaz.

Nastavení průběžného nasazování ve službě App Service

V následujících krocích nastavíte průběžné nasazování (CD), což znamená, že při aktivaci pracovního postupu dojde k novému nasazení kódu. Triggerem v tomto kurzu je jakákoli změna hlavní větve úložiště, jako je žádost o přijetí změn.

Krok 1. Přidejte akci GitHubu pomocí příkazu 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

Tento --login-with-github parametr používá interaktivní metodu k načtení osobního přístupového tokenu. Podle pokynů dokončete ověřování.

Pokud existuje soubor pracovního postupu, který je v konfliktu s názvem, který služba App Service používá, zobrazí se výzva, abyste zvolili, jestli se má přepsat. Pomocí parametru --force můžete přepsat bez dotazování.

K čemu příkaz add používá:

  • Vytvoří nový soubor pracovního postupu: .github/workflows/<workflow-name.yml> v úložišti. Název souboru bude obsahovat název vaší služby App Service.
  • Načte profil publikování s tajnými kódy pro službu App Service a přidá ho jako tajný kód akce GitHubu. Název tajného kódu začne AZUREAPPSERVICE_PUBLISHPROFILE_. Na tento tajný kód se odkazuje v souboru pracovního postupu.

Krok 2. Získejte podrobnosti o konfiguraci nasazení správy zdrojového kódu pomocí příkazu az webapp deployment source show .

az webapp deployment source show \
  --name <app-service-name> \
  --resource-group <resource-group-name>

Ve výstupu příkazu potvrďte hodnoty pro vlastnosti repoUrl a branch vlastnosti. Tyto hodnoty by se měly shodovat s hodnotami, které jste zadali v předchozím kroku.

Vysvětlení pracovních postupů a akcí GitHubu

Pracovní postup je definován souborem YAML (.yml) v cestě /.github/workflows/ ve vašem úložišti. Tento soubor YAML obsahuje různé kroky a parametry, které tvoří pracovní postup, automatizovaný proces přidružený k úložišti GitHub. Pomocí pracovního postupu můžete vytvářet, testovat, zabalit, vydávat a nasazovat libovolný projekt na GitHubu.

Každý pracovní postup se skládá z jedné nebo více úloh. Každá úloha je zase sada kroků. A nakonec je každý krok skript prostředí nebo akce.

Z hlediska pracovního postupu nastaveného pomocí kódu Pythonu pro nasazení do služby App Service má pracovní postup následující akce:

Akce Popis
Pokladna Podívejte se na úložiště na spouštěči, agenta GitHub Actions.
setup-python Nainstalujte Python na spouštěč.
appservice-build Sestavte webovou aplikaci.
nasazení webových aplikací Nasaďte webovou aplikaci pomocí přihlašovacích údajů profilu publikování k ověření v Azure. Přihlašovací údaje jsou uložené v tajném kódu GitHubu.

Šablona pracovního postupu, která se používá k vytvoření pracovního postupu, je Azure/actions-workflow-samples.

Pracovní postup se aktivuje při nabízených událostech do zadané větve. Událost a větev jsou definovány na začátku souboru pracovního postupu. Například následující fragment kódu ukazuje, že pracovní postup se aktivuje při nabízených událostech do hlavní větve:

on:
  push:
    branches:
    - main

Autorizované aplikace OAuth

Při nastavování průběžného nasazování autorizujete službu Aplikace Azure Service jako autorizovanou aplikaci OAuth pro váš účet GitHubu. App Service používá autorizovaný přístup k vytvoření souboru YML akce GitHubu v souboru .github/workflows/<workflow-name.yml>. V části Integrace a aplikace můžete zobrazit oprávnění a odvolat oprávnění v rámci účtů GitHubu Nastavení.

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

Tajný klíč profilu publikování pracovního postupu

V souboru pracovního postupu .github/workflows/<workflow-name.yml>, který byl přidán do úložiště, uvidíte zástupný symbol pro přihlašovací údaje profilu publikování, které jsou potřeba pro úlohu nasazení pracovního postupu. Informace o profilu publikování se ukládají zašifrované v úložišti Nastavení v části Zabezpečení/akce.

Screenshot showing how to view action secrets in GitHub.

V tomto článku se akce GitHubu ověřuje pomocí přihlašovacích údajů profilu publikování. Existují i jiné způsoby, jak se ověřit pomocí instančního objektu nebo openID Připojení. Další informace najdete v tématu Nasazení do služby App Service pomocí GitHub Actions.

Spuštění pracovního postupu

Teď pracovní postup otestujete provedením změny v úložišti.

Krok 1. Přejděte do forku ukázkového úložiště (nebo použitého úložiště) a vyberte větev, kterou jste nastavili jako součást triggeru.

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

Krok 2. Proveďte malou změnu.

Pokud jste například použili kurz VS Code Flask, můžete

  • Přejděte do souboru /hello-app/templates/home.html větve triggeru.
  • Vyberte Upravit a přidejte text "Znovu nasazen!".

Krok 3. Potvrďte změnu přímo do větve, ve které pracujete.

  • V pravém horním rohu stránky, kterou upravujete, vyberte tlačítko Potvrdit změny ... Otevře se okno Potvrdit změny . V okně Potvrdit změny upravte zprávu potvrzení, pokud je to žádoucí, a pak vyberte tlačítko Potvrdit změny.
  • Potvrzení spustí pracovní postup GitHub Actions.

Pracovní postup můžete také spustit ručně.

Krok 1. Přejděte na kartu Akce v úložišti nastaveném pro průběžné nasazování.

Krok 2. Vyberte pracovní postup v seznamu pracovních postupů a pak vyberte Spustit pracovní postup.

Řešení potíží s neúspěšným pracovním postupem

Pokud chcete zkontrolovat stav pracovního postupu, přejděte na kartu Akce v úložišti. Když přejdete k podrobnostem souboru pracovního postupu vytvořeného v tomto kurzu, zobrazí se dvě úlohy sestavení a nasazení. V případě neúspěšné úlohy se podívejte na výstup úkolů úlohy, kde najdete informace o selhání. Mezi běžné problémy patří:

  • Pokud aplikace selže kvůli chybějící závislosti, váš soubor requirements.txt se během nasazování nezpracoval. K tomuto chování dochází v případě, že jste webovou aplikaci vytvořili přímo na portálu, a ne pomocí az webapp up příkazu, jak je znázorněno v tomto článku.

  • Pokud jste službu App Service zřídili prostřednictvím portálu, je možné, že nastavení akce sestavení SCM_DO_BUILD_DURING_DEPLOYMENT nebylo nastaveno. Toto nastavení musí být nastaveno na truehodnotu . Příkaz az webapp up nastaví akci sestavení automaticky.

  • Pokud se zobrazí chybová zpráva s časovým limitem handshake PROTOKOLU TLS, spusťte pracovní postup ručně tak, že na kartě Akce v úložišti vyberete možnost Aktivovat automatické nasazení, abyste zjistili, jestli je časový limit dočasným problémem.

  • Pokud pro aplikaci kontejneru nastavíte průběžné nasazování, jak je znázorněno v tomto kurzu, automaticky se pro vás vytvoří soubor pracovního postupu (.github/workflows/<workflow-name.yml>). Pokud jste ho upravili, odeberte změny, abyste zjistili, jestli příčinou selhání nejsou.

Spuštění skriptu po nasazení

Skript po nasazení může například definovat proměnné prostředí očekávané kódem aplikace. Přidejte skript jako součást kódu aplikace a spusťte ho pomocí spouštěcího příkazu.

Pokud se chcete vyhnout pevnému kódování hodnot proměnných v souboru YML pracovního postupu, můžete je místo toho použít ve webovém rozhraní GitHubu a pak odkazovat na název proměnné ve skriptu. Můžete vytvořit šifrované tajné kódy pro úložiště nebo pro prostředí (úložiště účtů). Další informace najdete v tématu Šifrované tajné kódy v Dokumentaci GitHubu.

Důležité informace o Django

Jak jsme si poznamenali dříve v tomto článku, můžete pomocí GitHub Actions nasadit aplikace Django do služby Aplikace Azure Service v Linuxu, pokud používáte samostatnou databázi. Databázi SQLite nemůžete použít, protože App Service uzamkne soubor db.sqlite3, což brání čtení i zápisu. Toto chování nemá vliv na externí databázi.

Jak je popsáno v článku Konfigurace aplikace v Pythonu ve službě App Service – Proces spuštění kontejneru, App Service automaticky hledá soubor wsgi.py v kódu aplikace, který obvykle obsahuje objekt aplikace. Při použití příkazu k nastavení spouštěcího webapp config set příkazu jste použili --startup-file parametr k určení souboru, který obsahuje objekt aplikace. Příkaz webapp config set není k dispozici v akci webapps-deploy. Místo toho můžete pomocí startup-command parametru zadat spouštěcí příkaz. Například následující fragment kódu ukazuje, jak zadat spouštěcí příkaz v souboru pracovního postupu:

startup-command: startup.txt

Při použití Django obvykle chcete migrovat datové modely pomocí python manage.py migrate příkazu po nasazení kódu aplikace. Příkaz migrate můžete spustit ve skriptu po nasazení.

Odpojení GitHub Actions

Odpojení GitHub Actions od služby App Service umožňuje překonfigurovat nasazení aplikace. Po odpojení můžete zvolit, co se stane se souborem pracovního postupu, ať už soubor uložíte nebo odstraníte.

Odpojte GitHub Actions pomocí Azure CLI az webapp deployment github-actions remove command.

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

Vyčištění prostředků

Abyste se vyhnuli poplatkům za prostředky Azure vytvořené v tomto kurzu, odstraňte skupinu prostředků, která obsahuje službu App Service a plán služby App Service.

Kdekoli je nainstalované Rozhraní příkazového řádku Azure, včetně Azure Cloud Shellu, můžete k odstranění skupiny prostředků použít příkaz az group delete .

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

Pokud chcete odstranit účet úložiště, který udržuje systém souborů pro Cloud Shell, což způsobuje malé měsíční poplatky, odstraňte skupinu prostředků, která začíná cloud-shell-storage-. Pokud jste jediným uživatelem skupiny, je bezpečné odstranit skupinu prostředků. Pokud existují další uživatelé, můžete odstranit účet úložiště ve skupině prostředků.

Pokud jste odstranili skupinu prostředků Azure, zvažte také následující úpravy účtu GitHubu a úložiště připojeného k průběžnému nasazování:

  • V úložišti odeberte soubor .github/workflows/<workflow-name.yml>.
  • V nastavení úložiště odeberte AZUREAPPSERVICE_PUBLISHPROFILE_ tajný klíč vytvořený pro pracovní postup.
  • V nastavení účtu GitHub odeberte službu Aplikace Azure Service jako autorizovanou aplikaci Oauth pro váš účet GitHubu.