Sdílet prostřednictvím


Konfigurace průběžného nasazování pro webovou aplikaci v Pythonu v Azure Container Apps

Tento článek je součástí kurzu o kontejnerizaci a nasazení webové aplikace v Pythonu do Azure Container Apps. Container Apps umožňuje nasazovat kontejnerizované aplikace bez nutnosti spravovat složitou infrastrukturu.

V této části kurzu se dozvíte, jak nakonfigurovat průběžné nasazování nebo doručování (CD) pro aplikaci kontejneru. CD je součástí postupu kontinuální integrace / průběžného doručování (CI/CD), což je automatizace pracovního postupu vývoje aplikací. Konkrétně používáte GitHub Actions k průběžnému nasazování.

Tento diagram služby zvýrazňuje součásti popsané v tomto článku: konfigurace CI/CD.

Snímek obrazovky se službami v kurzu – Nasazení aplikace Pythonu v Azure Container Apps. Zvýrazněné oddíly jsou části související s kontinuální integrací – průběžné doručování (CI/CD).

Požadavky

K nastavení průběžného nasazování potřebujete:

Konfigurace disku CD pro kontejner

V předchozím článku tohoto kurzu jste vytvořili a nakonfigurovali aplikaci kontejneru v Azure Container Apps. Součástí konfigurace bylo načtení image Dockeru ze služby Azure Container Registry. Image kontejneru se načte z registru při vytváření revize kontejneru, například při prvním nastavení aplikace kontejneru.

V této části nastavíte průběžné nasazování pomocí pracovního postupu GitHub Actions. Při průběžném nasazování se na základě triggeru vytvoří nová image Dockeru a revize kontejneru. Triggerem v tomto kurzu je jakákoli změna hlavní větve úložiště, jako je žádost o přijetí změn. Po aktivaci pracovní postup vytvoří novou image Dockeru, odešle ji do služby Azure Container Registry a aktualizuje aplikaci kontejneru na novou revizi pomocí nové image.

Příkazy Azure CLI je možné spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI .

Pokud spouštíte příkazy v prostředí Git Bash na počítači s Windows, před pokračováním zadejte následující příkaz:

export MSYS_NO_PATHCONV=1

Krok 1. Pomocí příkazu az ad sp create-for-rbac vytvořte instanční objekt.

az ad sp create-for-rbac \
--name <app-name> \
--role Contributor \
--scopes "/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>"

Kde:

  • <název> aplikace je volitelný zobrazovaný název instančního objektu. Pokud možnost --name vynecháte, jako zobrazovaný název se vygeneruje identifikátor GUID.
  • <> ID předplatného je identifikátor GUID, který jednoznačně identifikuje vaše předplatné v Azure. Pokud své ID předplatného neznáte, můžete spustit příkaz az account show a zkopírovat ho id z vlastnosti ve výstupu.
  • <název> skupiny prostředků je název skupiny prostředků, která obsahuje kontejner Azure Container Apps. Řízení přístupu na základě role (RBAC) je na úrovni skupiny prostředků. Pokud jste postupovali podle kroků v předchozím článku v tomto kurzu, název skupiny prostředků je pythoncontainer-rg.

Uložte výstup tohoto příkazu pro další krok, zejména ID klienta (appId vlastnost), tajný klíč klienta (password vlastnost) a ID tenanta (tenant vlastnost).

Krok 2. Nakonfigurujte GitHub Actions pomocí příkazu 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

Kde:

  • <název> skupiny prostředků je název skupiny prostředků. Pokud sledujete tento kurz, jedná se o pythoncontainer-rg.
  • <https://github.com/userid/repo> je adresa URL vašeho úložiště GitHub. Pokud postupujete podle kroků v tomto kurzu, bude to buď https://github.com/userid/msdocs-python-django-azure-container-apps nebo https://github.com/userid/msdocs-python-flask-azure-container-apps, kde userid je VAŠE ID uživatele GitHubu.
  • <název> _registru je existující registr kontejneru, který jste vytvořili pro účely tohoto kurzu, nebo ten, který můžete použít.
  • <client-id> je hodnota appId vlastnosti z předchozího az ad sp create-for-rbac příkazu. ID je identifikátor GUID formuláře 00000000-0000-0000-0000-0000-0000000000.
  • <ID> tenanta je hodnota tenant vlastnosti z předchozího az ad sp create-for-rbac příkazu. ID je také identifikátor GUID podobný ID klienta.
  • <client-secret> je hodnota password vlastnosti z předchozího az ad sp create-for-rbac příkazu.

V konfiguraci průběžného nasazování se instanční objekt používá k povolení přístupu ke službě GitHub Actions a úpravě prostředků Azure. Přístup k prostředkům je omezený rolemi přiřazenými k instančnímu objektu. Instančnímu objektu byla přiřazena předdefinovaná role Přispěvatel ve skupině prostředků obsahující aplikaci kontejneru.

Pokud jste postupovali podle kroků pro portál, instanční objekt se automaticky vytvořil za vás. Pokud jste postupovali podle kroků pro Azure CLI, před konfigurací průběžného nasazování jste nejprve explicitně vytvořili instanční objekt.

Opětovné nasazení webové aplikace pomocí GitHub Actions

V této části provedete změnu rozvětvované kopie ukázkového úložiště a potvrdíte, že se tato změna automaticky nasadí na web.

Pokud jste to ještě neudělali, vytvořte fork ukázkového úložiště (Django nebo Flask). Změnu kódu můžete provést přímo v GitHubu nebo ve vývojovém prostředí z příkazového řádku s Gitem.

Krok 1. Přejděte do forku ukázkového úložiště a začněte v hlavní větvi.

Snímek obrazovky znázorňující fork ukázkového úložiště a začátek v hlavní větvi

Krok 2. Provést změnu.

  • Přejděte do souboru /templates/base.html . (Pro Django je cesta: restaurant_review/templates/restaurant_review/base.html.)
  • Vyberte Upravit a změňte frázi "Azure Restaurant Review" (Revize restaurace Azure) na "Azure Restaurant Review – Redeployed" (Revize restaurace Azure – Znovu nasazeno).

Snímek obrazovky znázorňující, jak provést změnu v souboru šablony ve forku ukázkového úložiště

Krok 3. Potvrďte změnu přímo do hlavní větve.

  • V dolní části stránky, kterou upravujete, vyberte tlačítko Potvrdit .
  • Potvrzení spustí pracovní postup GitHub Actions.

Snímek obrazovky znázorňující, jak potvrdit změnu v souboru šablony ve forku ukázkového úložiště

Poznámka:

Ukázali jsme změnu přímo v hlavní větvi. V typických softwarových pracovních postupech provedete změnu v jiné větvi, než je hlavní , a pak vytvoříte žádost o přijetí změn( PR), která tuto změnu sloučí do hlavní větve. Žádosti o přijetí změn také zahájí pracovní postup.

O nástroji GitHub Actions

Zobrazení historie pracovního postupu

Krok 1. Na GitHubu přejděte do forku ukázkového úložiště a otevřete kartu Akce .

Snímek obrazovky znázorňující, jak zobrazit GitHub Actions pro úložiště a podívat se na pracovní postupy

Tajné klíče pracovního postupu

V souboru pracovního postupu .github/workflows/<workflow-name>.yml souboru pracovního postupu přidaného do úložiště uvidíte zástupné symboly pro přihlašovací údaje potřebné pro úlohy aktualizace aplikace sestavení a kontejneru pracovního postupu. Informace o přihlašovacích údajích se ukládají zašifrované v nastavení úložiště v části Akce tajných kódů zabezpečení/a proměnných/.

Snímek obrazovky znázorňující, jak zjistit, kde jsou tajné kódy GitHub Actions uložené na GitHubu

Pokud se změní informace o přihlašovacích údaji, můžete je tady aktualizovat. Pokud se například znovu vygenerují hesla služby Azure Container Registry, budete muset aktualizovat REGISTRY_PASSWORD hodnotu. Další informace najdete v dokumentaci k GitHubu v části Šifrované tajné kódy .

Autorizované aplikace OAuth

Při nastavování průběžného nasazování autorizujete Azure Container Apps jako autorizovanou aplikaci OAuth pro váš účet GitHubu. Container Apps používá autorizovaný přístup k vytvoření souboru YML GitHub Actions v souboru .github/workflows/<workflow-name>.yml. V části Aplikace integrace/ vašeho účtu můžete zobrazit autorizované aplikace a odvolat oprávnění.

Snímek obrazovky znázorňující, jak zobrazit autorizované aplikace pro uživatele na GitHubu

Rady pro řešení potíží

Chyby při nastavování instančního objektu pomocí příkazu Azure CLI az ad sp create-for-rba

  • Zobrazí se chyba Typu InvalidSchema: Nebyly nalezeny žádné adaptéry připojení.

  • Zobrazí se chyba obsahující "Více než jedna aplikace má stejný zobrazovaný název".

    • Tato chyba značí, že název se už používá pro instanční objekt. Zvolte jiný název nebo vynechte --name argument a identifikátor GUID se automaticky vygeneruje jako zobrazovaný název.

Pracovní postup GitHub Actions selhal.

  • Pokud chcete zkontrolovat stav pracovního postupu, přejděte na kartu Akce v úložišti.
  • Pokud dojde k selhání pracovního postupu, přejděte k podrobnostem jeho souboru pracovního postupu. Měly by existovat dvě úlohy sestavení a nasazení. V případě neúspěšné úlohy se podívejte na výstup úkolů úlohy a vyhledejte problémy.
  • 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, vytvoří se automaticky soubor pracovního postupu (.github/workflows/<workflow-name>.yml). Pro účely tohoto kurzu byste tento soubor nemuseli upravovat. Pokud jste to udělali, vraťte změny a zkuste pracovní postup.

Web nezobrazuje změny, které jste sloučili v hlavní větvi.

  • Na GitHubu: Zkontrolujte, jestli se spustil pracovní postup GitHub Actions a že jste zkontrolovali změnu ve větvi, která tento pracovní postup aktivuje.
  • Na webu Azure Portal: Ve službě Azure Container Registry zkontrolujte, jestli se po změně na větev vytvořila nová image Dockeru s časovým razítkem.
  • Na webu Azure Portal: Zkontrolujte protokoly aplikace kontejneru. Pokud dojde k chybě programování, uvidíte ji tady.
    • Přejít do kontejnerové aplikace | Správa revizí | <aktivní kontejner> | Podrobnosti revize | Protokoly konzoly
    • Zvolte pořadí sloupců, ve kterých se má zobrazit "Čas vygenerovaný", "Stream_s" a "Log_s". Seřaďte protokoly podle nejnovějšího data a ve sloupci "Stream_s" vyhledejte zprávy stderr a stdout Pythonu. Výstupem pythonu print budou zprávy stdout .
  • Pomocí Azure CLI použijte příkaz az containerapp logs show .

Co se stane, když odpojím průběžné nasazování?

  • Zastavení průběžného nasazování znamená odpojení aplikace kontejneru od úložiště. Odpojení:

  • Po odpojení v úložišti GitHub:

    • Soubor .github/workflows/<workflow-name>.yml se z úložiště odebere.
    • Tajné klíče se neodeberou.
    • Azure Container Apps zůstává pro váš účet GitHubu jako autorizovaná aplikace OAuth.
  • Po odpojení v Azure:

    • Kontejner zůstane s posledním nasazeným kontejnerem. Aplikaci kontejneru můžete znovu připojit ke službě Azure Container Registry, aby nové revize kontejnerů nabíraly nejnovější image.
    • Instanční objekty vytvořené a používané pro průběžné nasazování se neodstraní.

Další kroky

Pokud jste s kurzem hotovi a nechcete mít další náklady, odeberte použité prostředky. Odebráním skupiny prostředků odeberete všechny prostředky ve skupině a nejrychleji odeberete prostředky. Příklad odebrání skupin prostředků najdete v tématu Vyčištění kurzu Containerize.

Pokud plánujete stavět na tomto kurzu, tady je několik dalších kroků, které můžete provést.