Sdílet prostřednictvím


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

Tento článek je součástí série kurzů 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 tomto kurzu:

  • Nakonfigurujte průběžné nasazování pro aplikaci kontejneru pomocí pracovního postupu GitHub Actions.
  • Proveďte změnu kopie ukázkového úložiště, aby se aktivoval pracovní postup GitHub Actions.
  • Řešení potíží, se kterými se můžete setkat při konfiguraci průběžného nasazování
  • Odeberte prostředky, které nepotřebujete, až dokončíte sérii tutoriálů.

Průběžné nasazování souvisí s postupy DevOps kontinuální integrace a průběžného doručování (CI/CD), což je automatizace pracovního postupu vývoje aplikací.

Následující diagram zvýrazňuje úkoly v tomto kurzu.

diagram služeb zapojených do nasazení aplikace Python v Azure Container Apps se zvýrazněnými částmi o průběžném nasazování

Požadavky

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

  • Prostředky (a jejich konfigurace), které jste vytvořili v předchozím kurzu, které zahrnují instanci Azure Container Registry a kontejnerovou aplikaci v Azure Container Apps.

  • Účet GitHubu, ve kterém jste forkovali ukázkový kód (Django nebo Flask) a ke kterému se můžete připojit z Azure Container Apps. (Pokud jste místo naklonování stáhli ukázkový kód, nezapomeňte odeslat své místní úložiště na svůj účet GitHub.)

  • Volitelně můžete Git nainstalovaný ve vašem vývojovém prostředí, aby se změny kódu a nasdílení změn do úložiště na GitHubu. Případně můžete provést změny přímo na GitHubu.

Konfigurace průběžného nasazování pro kontejner

V předchozím kurzu jste vytvořili a nakonfigurovali aplikaci kontejneru v Azure Container Apps. Součástí konfigurace bylo vyžádání image Dockeru z instance služby Azure Container Registry. Image kontejneru se načte z registru při vytváření kontejneru revize, 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. Spouštěčem v tomto kurzu je jakákoli změna hlavní větve vašeho úložiště, například vytvořením požadavku na začlenění. Když se pracovní postup aktivuje, vytvoří novou image Dockeru, odešle ji do instance služby Azure Container Registry a aktualizuje aplikaci kontejneru na novou revizi pomocí nové image.

Příkazy Azure CLI můžete spouštět v Azure Cloud Shellu nebo na pracovní stanici, ve které je nainstalovaná 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
  1. Vytvořte principála služby pomocí příkazu az ad sp create-for-rbac.

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

    V příkazu:

    • <název aplikace> je volitelný zobrazovaný název služebního principála. 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 id předplatného neznáte, můžete spustit příkaz az account show a zkopírovat ho z vlastnosti id 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 kurzu, název skupiny prostředků je pythoncontainer-rg.

    Uložte výstup tohoto příkazu pro další krok. Konkrétně uložte ID klienta (appId vlastnost), tajný klíč klienta (vlastnostpassword) a ID tenanta (tenant vlastnost).

  2. Konfigurujte 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
    

    V příkazu:

    • <název skupiny prostředků> je název skupiny prostředků. V tomto kurzu je to pythoncontainer-rg.
    • <https://github.com/userid/repo> je adresa URL vašeho úložiště GitHub. V tomto kurzu je to buď https://github.com/userid/msdocs-python-django-azure-container-apps, nebo https://github.com/userid/msdocs-python-flask-azure-container-apps. V těchto adresách URL userid je ID uživatele GitHubu.
    • <název registru> je existující instance služby Azure Container Registry, kterou jste vytvořili v předchozím kurzu, nebo instanci, kterou můžete použít.
    • <id klienta> je hodnota vlastnosti appId z předchozího příkazu az ad sp create-for-rbac. ID je GUID ve formátu 00000000-0000-0000-0000-00000000.
    • <id tenanta> je hodnota vlastnosti tenant z předchozího příkazu az ad sp create-for-rbac. ID je také identifikátor GUID, který se podobá ID klienta.
    • <tajný klíč klienta> je hodnota vlastnosti password z předchozího příkazu az ad sp create-for-rbac.

V konfiguraci průběžného nasazování umožňuje služební hlavní prvek , aby GitHub Actions přistupovaly k prostředkům Azure a upravovaly je. Role přiřazené principálu služby omezují přístup k prostředkům. Služebnímu principálu byla přiřazena předdefinovaná role Přispěvatele ve skupině prostředků, která obsahuje kontejnerovou aplikaci.

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

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

V této části provedete změnu ve forkované kopii ukázkového úložiště. Potom můžete potvrdit, že se 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 Git.

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

    Snímek obrazovky, který znázorňuje hlavní větev ve forku ukázkového úložiště.

  2. Proveďte změnu:

    1. Přejděte do souboru /templates/base.html. (Pro Django je cesta restaurant_review/templates/restaurant_review/base.html.)
    2. Vyberte Upravit a změňte frázi Azure Restaurant Review na Azure Restaurant Review - Redeployed.

    Snímek obrazovky, který ukazuje, jak provést změnu v souboru šablony ve forku ukázkového úložiště

  3. V dolní části stránky, kterou upravujete, se ujistěte, aby byla vybrána možnost Potvrdit přímo do hlavní větve. Pak vyberte tlačítko Potvrdit změny.

    snímek obrazovky znázorňující výběry pro potvrzení změny v souboru šablony ve forku ukázkového úložiště

Potvrzení spustí pracovní postup GitHub Actions.

Poznámka

V tomto tutoriálu se dozvíte, jak provést změnu přímo v hlavní větvi . V typických softwarových pracovních postupech provedete změnu v jiné větvi než main a pak vytvoříte pull request ke sloučení změny do main. Žádosti o přijetí změn (pull requesty) také zahájí pracovní postup.

Pochopit GitHub Actions

Zobrazení historie pracovního postupu

Pokud potřebujete zobrazit historii pracovního postupu, použijte jeden z následujících postupů.

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

Snímek obrazovky, který zobrazuje pracovní postupy na kartě akce v úložišti

Tajné kódy pracovního postupu

Soubor pracovního postupu .github/workflows/<.workflow-name>.yml, který byl přidán do úložiště, obsahuje zástupné symboly pro přihlašovací údaje potřebné pro úkoly sestavení a aktualizace kontejnerové aplikace v rámci pracovního postupu. Informace o přihlašovacích údajích jsou uloženy zašifrované v oblasti nastavení úložiště v části Zabezpečení>Tajnosti a proměnné>Akce.

snímek obrazovky, který zobrazuje přihlašovací údaje jako tajné kódy GitHub Actions

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, musíte aktualizovat REGISTRY_PASSWORD hodnotu. Další informace najdete v tématu Šifrované tajné kódy v dokumentaci k GitHubu.

Autorizované aplikace OAuth

Při nastavování průběžného nasazování určíte Azure Container Apps jako autorizovanou aplikaci OAuth pro váš účet GitHubu. Container Apps používá autorizovaný přístup ke vytvoření YAML souboru GitHub Actions v .github/workflows/<název pracovního postupu>.yml. V části Integrations>Applicationsmůžete zobrazit autorizované aplikace a odvolat oprávnění ve vašem účtu.

snímek obrazovky znázorňující umístění autorizovaných aplikací pro uživatele na GitHubu

Řešit problémy

Při nastavování služebního objektu prostřednictvím Azure CLI dochází k chybám.

Tato část vám pomůže vyřešit chyby, které se zobrazí při nastavování aplikačního objektu použitím příkazu Azure CLI az ad sp create-for-rba.

Pokud se zobrazí chyba, která obsahuje "InvalidSchema: Nenašly se žádné adaptéry připojení":

Pokud se zobrazí chyba, která obsahuje více než jednu aplikaci se stejným zobrazovaným názvem:

  • Název je již obsazen pro službu principal. Zvolte jiný název nebo vynechte argument --name. Identifikátor GUID se automaticky vygeneruje jako zobrazovaný název.

Pracovní postup GitHub Actions selhal

Ke kontrole stavu pracovního postupu přejděte na záložku Akce repositáře:

  • Pokud dojde k selhání pracovního postupu, podívejte se do souboru pracovního postupu. Měly by existovat dvě úlohy: sestavení a nasazení. V případě selhání úlohy zkontrolujte výstupy jejích úkolů a vyhledejte problémy.
  • Pokud se zobrazí chybová zpráva obsahující "časový limit handshake protokolu TLS," spusťte pracovní postup ručně. V úložišti na kartě Akce vyberte Spustit automatické nasazení pro ověření, jestli je timeout 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/<název pracovního postupu>.yml). Pro účely tohoto kurzu byste tento soubor nemuseli upravovat. Pokud jste to udělali, vraťte změny a zkuste znovu pracovní postup.

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

Na GitHubu:

  • Zkontrolujte, že pracovní postup GitHub Actions běžel a že jste zkontrolovali změnu ve větvi, která pracovní postup aktivuje.

Na webu Azure Portal:

  • Zkontrolujte instanci služby Azure Container Registry a zjistěte, jestli byl vytvořen nový obraz Dockeru s časovým razítkem po vaší změně větve.

  • Zkontrolujte protokoly aplikace kontejneru a zjistěte, jestli došlo k chybě programování:

    1. Přejděte do aplikace kontejneru a pak přejděte na Správa revizí><aktivní kontejner>>podrobnosti revize>protokoly konzoly.
    2. Zvolte pořadí sloupců pro zobrazení Time Generated, Stream_sa Log_s.
    3. Seřaďte protokoly podle nejnovějších položek a ve sloupci Stream_s vyhledejte zprávy stderr a stdout spojené s Pythonem. Výstup Pythonu print jsou zprávy stdout.

V Azure CLI:

Chcete zastavit průběžné nasazování

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

Na webu Azure Portal:

  • Přejděte do aplikace kontejneru. V nabídce služby vyberte Průběžné nasazovánía pak vyberte Odpojit.

V Azure CLI:

Po odpojení:

  • Soubor .github/workflows/<název pracovního postupu>.yml byl odstraněn z vašeho úložiště.
  • Tajné klíče se z úložiště neodeberou.
  • Azure Container Apps zůstává pro váš účet GitHubu jako autorizovaná aplikace OAuth.
  • V Azure zůstane kontejner s posledním nasazeným kontejnerem. Aplikaci kontejneru můžete znovu připojit k instanci služby Azure Container Registry, aby nové revize kontejnerů vyzvedly nejnovější image.
  • V Azure se neodstraní instanční objekty, které jste vytvořili a použili pro průběžné nasazování.

Odebrání prostředků

Pokud jste hotovi se sérií tutoriálů a nechcete mít dodatečné náklady, odstraňte prostředky, které jste použili.

Odebráním skupiny prostředků odeberete všechny prostředky ve skupině a nejrychleji odeberete prostředky. Příklady toho, jak odstranit skupiny prostředků, najdete v části Vyčištění tutoriálu Containerize.

Pokud chcete navázat na tento návod, zde jsou některé další kroky, které můžete udělat: