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.
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
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).-
<název aplikace> je volitelný zobrazovaný název služebního principála. Pokud možnost
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
, nebohttps://github.com/userid/msdocs-python-flask-azure-container-apps
. V těchto adresách URLuserid
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říkazuaz ad sp create-for-rbac
. ID je GUID ve formátu00000000-0000-0000-0000-00000000
. -
<id tenanta> je hodnota vlastnosti
tenant
z předchozího příkazuaz 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říkazuaz ad sp create-for-rbac
.
-
<název skupiny prostředků> je název skupiny prostředků. V tomto kurzu je to
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.
Přejděte do forku ukázkového úložiště a začněte v hlavní větvi.
Proveďte 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
naAzure Restaurant Review - Redeployed
.
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.
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ů.
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.
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.
Ř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í":
Zkontrolujte shell, ve kterém běžíte. Pokud používáte prostředí Bash, nastavte proměnné
MSYS_NO_PATHCONV
jakoexport MSYS_NO_PATHCONV=1
.Další informace najdete v problému s GitHubem Nejde vytvořit instanční objekt pomocí Azure CLI z prostředí Git Bash.
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í:
- Přejděte do aplikace kontejneru a pak přejděte na Správa revizí><aktivní kontejner>>podrobnosti revize>protokoly konzoly.
- Zvolte pořadí sloupců pro zobrazení Time Generated, Stream_sa Log_s.
- Seřaďte protokoly podle nejnovějších položek a ve sloupci Stream_s vyhledejte zprávy
stderr
astdout
spojené s Pythonem. Výstup Pythonuprint
jsou zprávystdout
.
V Azure CLI:
- Použijte příkaz az containerapp logs show.
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:
- Použijte příkaz az container app github-action remove.
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.
Související obsah
Pokud chcete navázat na tento návod, zde jsou některé další kroky, které můžete udělat: