Tutorial: Configurar a implantação contínua para um aplicativo Web Python em Aplicativos de Contêiner do Azure
Este artigo faz parte de uma série de tutoriais sobre como contentorizar e implementar uma aplicação Web Python para Aplicações de Contentor do Azure. O Container Apps permite que você implante aplicativos em contêineres sem gerenciar uma infraestrutura complexa.
Neste tutorial, você:
- Configure a implantação contínua para um aplicativo de contêiner usando um fluxo de trabalho Ações
GitHub. - Faça uma alteração em uma cópia do repositório de exemplo para acionar o fluxo de trabalho de Ações do GitHub.
- Solucione problemas que você pode encontrar com a configuração da implantação contínua.
- Remova os recursos de que não precisa quando terminar a série de tutoriais.
A implantação contínua está relacionada à prática de DevOps de integração contínua e entrega contínua (CI/CD), que é a automação do fluxo de trabalho de desenvolvimento do seu aplicativo.
O diagrama a seguir destaca as tarefas neste tutorial.
Pré-requisitos
Para configurar a implantação contínua, você precisa:
Os recursos (e sua configuração) que você criou no tutorial anterior, que inclui uma instância de de Registro de Contêiner do Azure e um aplicativo de contêiner em Aplicativos de Contêiner do Azure.
Uma conta do GitHub onde você bifurcou o código de exemplo (Django ou Flask) e ao qual você pode se conectar a partir dos Aplicativos de Contêiner do Azure. (Se você baixou o código de exemplo em vez de bifurcar, certifique-se de enviar seu repositório local para sua conta do GitHub.)
Opcionalmente, Git instalado em seu ambiente de desenvolvimento para fazer alterações de código e enviar por push para seu repositório no GitHub. Como alternativa, você pode fazer as alterações diretamente no GitHub.
Configurar a implantação contínua para um contêiner
No tutorial anterior, você criou e configurou um aplicativo de contêiner nos Aplicativos de Contêiner do Azure. Parte da configuração foi extrair uma imagem do Docker de uma instância do Registro de Contêiner do Azure. A imagem de contêiner é extraída do Registro quando você cria um contêiner revisão, como quando você configura o aplicativo contêiner pela primeira vez.
Nesta seção, você configura a implantação contínua usando um fluxo de trabalho de Ações do GitHub. Com a implantação contínua, uma nova imagem do Docker e uma nova revisão de contêiner são criadas com base em um gatilho. O gatilho neste tutorial é qualquer alteração no ramificação principal do repositório, como uma solicitação pull. Quando o fluxo de trabalho é acionado, ele cria uma nova imagem do Docker, envia-a por push para a instância do Registro de Contêiner do Azure e atualiza o aplicativo de contêiner para uma nova revisão usando a nova imagem.
- da CLI do Azure
- portal do Azure
Você pode executar comandos da CLI do Azure em do Azure Cloud Shell ou em uma estação de trabalho onde da CLI do Azure está instalada.
Se você estiver executando comandos em um shell Git Bash em um computador Windows, digite o seguinte comando antes de continuar:
export MSYS_NO_PATHCONV=1
Crie uma entidade de serviço usando o comando 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>"
No comando:
-
<app-name> é um nome de exibição opcional para o serviço principal. Se não incluir a opção
--name
, um GUID será gerado como nome de exibição. -
<ID de assinatura> é a GUID que identifica exclusivamente a sua assinatura no Azure. Se você não souber sua ID de assinatura, poderá executar o comando az account show e copiá-lo da propriedade
id
na saída. -
<o nome do grupo de recursos> é o nome de um grupo de recursos que contém o contentor de Aplicações de Contentor do Azure. O controlo de acesso baseado em funções (RBAC) aplica-se ao nível do grupo de recursos. Se você seguiu as etapas no tutorial anterior, o nome do grupo de recursos será
pythoncontainer-rg
.
Guarde a saída deste comando para o próximo passo. Em particular, salve a ID do cliente (propriedade
appId
), o segredo do cliente (propriedadepassword
) e a ID do locatário (propriedadetenant
).-
<app-name> é um nome de exibição opcional para o serviço principal. Se não incluir a opção
Configure as ações do GitHub usando o comando 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
No comando:
-
<
>
resource-group-name é o nome do grupo de recursos. Neste tutorial, é
pythoncontainer-rg
. -
<https://github.com/userid/repo> é a URL do seu repositório GitHub. Neste tutorial, é
https://github.com/userid/msdocs-python-django-azure-container-apps
ouhttps://github.com/userid/msdocs-python-flask-azure-container-apps
. Nesses URLs,userid
é o seu ID de usuário do GitHub. - < > de nome do Registro é a instância existente do Registro de Contêiner do Azure que você criou no tutorial anterior ou uma que você pode usar.
-
<ID do cliente> é o valor da propriedade
appId
do comandoaz ad sp create-for-rbac
anterior. O ID é um GUID do formato00000000-0000-0000-0000-00000000
. -
<o ID do locatário> é o valor da propriedade
tenant
do comando anterioraz ad sp create-for-rbac
. O ID também é um GUID semelhante ao ID do cliente. -
<
>
segredo-do-cliente é o valor da propriedade
password
do comandoaz ad sp create-for-rbac
anterior.
-
<
>
resource-group-name é o nome do grupo de recursos. Neste tutorial, é
Na configuração da implantação contínua, uma entidade de serviço permite que as Ações do GitHub acessem e modifiquem os recursos do Azure. As funções atribuídas ao principal de serviço restringem o acesso aos recursos. A entidade de serviço foi atribuída a função interna de Colaborador no grupo de recursos que contém o aplicativo de contêiner.
Se seguiu as etapas no portal, o principal de serviço foi criado automaticamente. Se seguiu os passos para a CLI do Azure, criou explicitamente o principal de serviço antes de configurar a implantação contínua.
Reimplantar o aplicativo Web com as Ações do GitHub
Nesta seção, você faz uma alteração na cópia bifurcada do repositório de exemplo. Depois disso, você pode confirmar que a alteração é implantada automaticamente no site.
Se ainda não o fez, faça um fork do repositório de exemplo (Django ou Flask). Você pode fazer a alteração do código diretamente no GitHub ou no seu ambiente de desenvolvimento a partir de uma linha de comando com o Git.
Vá para a bifurcação do repositório de exemplo e comece na ramificação principal
. Faça uma alteração:
- Vá para o arquivo /templates/ base.html. (Para Django, o caminho é restaurant_review/templates/restaurant_review/base.html.)
- Selecione Editar e altere a frase
Azure Restaurant Review
paraAzure Restaurant Review - Redeployed
.
Na parte inferior da página que está a editar, certifique-se de que Confirmar diretamente na ramificação principal está selecionado. Em seguida, selecione o botão Confirmar alterações.
A confirmação inicia o fluxo de trabalho de Ações do GitHub.
Observação
Este tutorial mostra como fazer uma alteração diretamente na ramificação principal
Entenda as ações do GitHub
Exibindo o histórico do fluxo de trabalho
Se você precisar exibir o histórico do fluxo de trabalho, use um dos procedimentos a seguir.
Segredos do fluxo de trabalho
O ficheiro de fluxo de trabalho .github/workflows/<>.yml, que foi adicionado ao repositório, inclui marcadores para credenciais necessárias aos trabalhos de construção e atualização de aplicações em contêiner do fluxo de trabalho. As informações de credenciais são armazenadas criptografadas na área de Configurações de
Se as informações de credenciais forem alteradas, você pode atualizá-las aqui. Por exemplo, se as senhas do Registro de Contêiner do Azure forem regeneradas, você precisará atualizar o valor REGISTRY_PASSWORD
. Para obter mais informações, consulte Segredos criptografados na documentação do GitHub.
Aplicações autorizadas pelo OAuth
Ao configurar a implantação contínua, você designa os Aplicativos de Contêiner do Azure como um aplicativo OAuth autorizado para sua conta do GitHub. O Container Apps usa o acesso autorizado para criar um arquivo YAML de Ações do GitHub em .github/workflows/<nome do fluxo de trabalho>.yml. Pode ver as suas aplicações autorizadas e revogar permissões na sua conta em Integrações>Aplicações.
Resolver problemas
Você recebe erros ao configurar uma entidade de serviço por meio da CLI do Azure
Esta seção pode ajudá-lo a solucionar erros que você encontra ao configurar um principal de serviço usando o comando az ad sp create-for-rba
da CLI do Azure.
Se você receber um erro que contém "InvalidSchema: Nenhum adaptador de conexão foi encontrado":
Verifique o shell em que você está executando. Se você estiver usando um shell Bash, defina as variáveis
MSYS_NO_PATHCONV
comoexport MSYS_NO_PATHCONV=1
.Para obter mais informações, consulte o problema do GitHub Não é possível criar principal de serviço com a CLI do Azure a partir do shell do Git Bash.
Se você receber um erro que contém "Mais de um aplicativo tem o mesmo nome para exibição":
- O nome já foi usado para a entidade de serviço. Escolha outro nome ou deixe de lado o argumento
--name
. Um GUID será gerado automaticamente como nome de exibição.
Falha no fluxo de trabalho do GitHub Actions
Para verificar o status de um fluxo de trabalho, vá para a guia Ações
- Se houver um fluxo de trabalho com falha, analise detalhadamente o arquivo de fluxo de trabalho. Deve haver dois trabalhos: construir e implantar. Se um trabalho falhar, verifique a saída das tarefas para identificar problemas.
- Se houver uma mensagem de erro que contenha "Tempo limite de handshake TLS", execute o fluxo de trabalho manualmente. No repositório, na guia de Ações , selecione Acionar implantação automática para ver se o tempo limite é um problema temporário.
- Se você configurar a implantação contínua para o aplicativo de contêiner, conforme mostrado neste tutorial, o arquivo de fluxo de trabalho (.github/workflows/<nome do fluxo de trabalho>.yml) será criado automaticamente para você. Você não deve precisar modificar este arquivo para este tutorial. Se o fez, reverta as alterações e experimente o fluxo de trabalho.
O site não mostra as alterações que você mesclou na ramificação principal
No GitHub:
- Verifique se o fluxo de trabalho Ações do GitHub foi executado e se você verificou a alteração na ramificação que aciona o fluxo de trabalho.
No portal do Azure, siga estes passos:
Verifique a instância do Registro de Contêiner do Azure para ver se uma nova imagem do Docker foi criada com um carimbo de data/hora após sua alteração na ramificação.
Verifique os logs do aplicativo contêiner para ver se há um erro de programação:
- Aceda à aplicação de gestão de contentores e, em seguida, aceda a Gestão de revisões do contentor ativo><>>Detalhes da revisão>Registos da consola.
- Escolha a ordem das colunas para mostrar Hora de Geração, Stream_se Log_s.
- Classifique os logs por mais recentes e procure mensagens Python
stderr
estdout
na coluna Stream_s. A saída Pythonprint
é destdout
mensagens.
Na CLI do Azure:
- Utilize o comando az containerapp logs show.
Você deseja interromper a implantação contínua
Interromper a implantação contínua significa desconectar seu aplicativo de contêiner do seu repositório.
No Portal do Azure:
- Vá para o aplicativo de contêiner. No menu de serviço, selecione Implantação contínuae, em seguida, selecione Desconectar.
Na CLI do Azure:
- Utilize o comando az container app github-action remove.
Depois de desligar:
- O arquivo .github/workflows/<workflow-name>.yml é removido do seu repositório.
- As chaves secretas não são removidas do repositório.
- Os Aplicativos de Contêiner do Azure permanecem como um aplicativo OAuth autorizado para sua conta do GitHub.
- No Azure, o contêiner é deixado com o último contêiner implantado. Você pode reconectar o aplicativo de contêiner com a instância do Registro de Contêiner do Azure, para que novas revisões de contêiner recebam a imagem mais recente.
- No Azure, as entidades de serviço que você criou e usou para implantação contínua não são excluídas.
Remover recursos
Se você terminou a série de tutoriais e não quer incorrer em custos extras, remova os recursos usados.
A remoção de um grupo de recursos remove todos os recursos do grupo e é a maneira mais rápida de remover recursos. Para obter um exemplo de como remover grupos de recursos, consulte limpeza do tutorial Containerize.
Conteúdo relacionado
Se você planeja desenvolver este tutorial, aqui estão algumas próximas etapas que você pode tomar: