Compartilhar via


Tutorial: Configurar a implantação contínua para um aplicativo Web Python nos Aplicativos de Contêiner do Azure

Este artigo faz parte de uma série de tutoriais sobre como colocar em contêineres e implantar um aplicativo Web Python nos Aplicativos de Contêiner do Azure. Os Aplicativos de Contêiner permitem implantar 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 do GitHub Actions.
  • Faça uma alteração em uma cópia do repositório de exemplo para disparar o fluxo de trabalho do GitHub Actions.
  • Solucione problemas que você possa encontrar ao configurar a implantação contínua.
  • Remova os recursos que você não precisa ao concluir a série de tutoriais.

A implantação contínua está relacionada à prática de DevOps de CI/CD (integração contínua e entrega contínua), que é a automação do fluxo de trabalho de desenvolvimento de aplicativos.

O diagrama a seguir realça as tarefas neste tutorial.

Diagrama de serviços envolvidos na implantação de um aplicativo Python em Aplicativos de Contêiner do Azure, com as partes sobre implantação contínua realçadas.

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 do 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 por meio 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, o Git instalado em seu ambiente de desenvolvimento para fazer alterações de código e efetuar push para o 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 do contêiner é extraída do registro quando você cria um contêiner revisão, como quando você configura o aplicativo de contêiner pela primeira vez.

Nesta seção, você configurará a implantação contínua usando um fluxo de trabalho do GitHub Actions. Com a implantação contínua, uma nova imagem do Docker e uma revisão de contêiner são criadas com base em um gatilho. O gatilho neste tutorial é qualquer alteração no branch principal de seu repositório, por exemplo, com uma solicitação de pull. Quando o fluxo de trabalho é disparado, ele cria uma nova imagem do Docker, envia 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.

Você pode executar comandos da CLI do Azure no do Azure Cloud Shell ou em uma estação de trabalho em que CLI do Azure está instalado.

Se você estiver executando comandos em um shell do Git Bash em um computador Windows, insira o seguinte comando antes de prosseguir:

export MSYS_NO_PATHCONV=1
  1. Crie uma entidade de serviço ao usar 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 a entidade de serviço. Se você deixar de fora a opção --name, um GUID será gerado como o nome de exibição.
    • <ID de assinatura> é o GUID que identifica exclusivamente sua assinatura no Azure. Se você não souber a ID da sua assinatura, poderá executar o comando az account show e copiá-la da propriedade id na saída.
    • <nome do grupo de recursos> é o nome de um grupo de recursos que contém o contêiner de Aplicativos de Contêiner do Azure. O RBAC (controle de acesso baseado em função) é aplicado em nível de grupo de recursos. Se você seguiu as etapas no tutorial anterior, o nome do grupo de recursos será pythoncontainer-rg.

    Salve a saída desse comando para a próxima etapa. Em particular, salve a ID do cliente ( propriedadeappId), o segredo do cliente (propriedadepassword) e a ID do locatário ( propriedadetenant).

  2. Configure o GitHub Actions 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:

    • <> é o nome do grupo de recursos. Neste tutorial, é pythoncontainer-rg.
    • <https://github.com/userid/repo> é a URL do repositório GitHub. Neste tutorial, é https://github.com/userid/msdocs-python-django-azure-container-apps ou https://github.com/userid/msdocs-python-flask-azure-container-apps. Nessas URLs, userid é sua ID de usuário do GitHub.
    • <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.
    • <client-id> é o valor da propriedade appId do comando anterior az ad sp create-for-rbac. A ID é um GUID do formulário 00000000-0000-0000-0000-00000000.
    • <tenant-id> é o valor da propriedade tenant do comando anterior az ad sp create-for-rbac. O ID também é um GUID semelhante ao ID do cliente.
    • <client-secret> é o valor da propriedade password do comando anterior az ad sp create-for-rbac.

Na configuração da implantação contínua, uma entidade de serviço habilita que o GitHub Actions acesse e modifique os recursos do Azure. As funções atribuídas ao service principal restringem o acesso a recursos. A entidade de serviço recebeu a função integrada de Colaborador no grupo de recursos que contém o aplicativo de contêiner.

Se você seguiu as etapas do portal, a entidade de serviço foi criada automaticamente para você. Se você seguiu as etapas da CLI do Azure, você criou explicitamente a entidade de serviço antes de configurar a implantação contínua.

Reimplantar o aplicativo Web com o GitHub Actions

Nesta seção, você realiza uma alteração na sua versão bifurcada do repositório de exemplo. Depois disso, você pode confirmar se a alteração é implantada automaticamente no site.

Caso ainda não tenha feito isso, faça um fork do repositório de exemplo (Django ou Flask). Você pode fazer sua alteração de código diretamente no github ou em seu ambiente de desenvolvimento a partir de uma linha de comando com Git.

  1. Vá para seu fork do repositório de exemplo e inicie no branch principal.

    Captura de tela que mostra o branch principal em um fork do repositório de exemplo.

  2. Faça uma alteração:

    1. Vá para o arquivo /templates/base.html. (Para o Django, o caminho é restaurant_review/templates/restaurant_review/base.html.)
    2. Selecione Editar e altere a frase Azure Restaurant Review para Azure Restaurant Review - Redeployed.

    Captura de tela que mostra como fazer uma alteração em um arquivo de modelo na bifurcação do repositório de exemplo.

  3. Na parte inferior da página que você está editando, verifique se Fazer commit diretamente no branch principal está selecionado. Em seguida, selecione o botão Fazer commit das alterações.

    Captura de tela que mostra as seleções para confirmar uma alteração em um arquivo de modelo no fork do repositório de exemplo.

A confirmação inicia o fluxo de trabalho do GitHub Actions.

Nota

Este tutorial mostra como fazer uma alteração diretamente no branch principal. Em fluxos de trabalho de software típicos, você faz uma alteração em um branch que não seja o main e, em seguida, cria uma solicitação de pull para mesclar a alteração no main. Solicitações de pull também iniciam o fluxo de trabalho.

Entender 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.

Em GitHub, vá para o fork do repositório de exemplo e abra a guia Ações.

Captura de tela que mostra fluxos de trabalho na guia Ações para um repositório.

Segredos de fluxo de trabalho

O arquivo de fluxo de trabalho .github/workflows/<nome_do_fluxo_de_trabalho>.yml que foi adicionado ao repositório inclui espaços reservados para credenciais necessárias para os trabalhos de build e de atualização de aplicativo de contêiner do fluxo de trabalho. As informações da credencial são armazenadas criptografadas na área de Configurações em Segurança>Segredos e variáveis>Ações.

Captura de tela que mostra credenciais como segredos do GitHub Actions.

Se as informações de credencial forem alteradas, você poderá 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.

Aplicativos autorizados do 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. Aplicativos de Contêiner usa o acesso autorizado para criar um arquivo YAML do GitHub Actions em .github/workflows/<workflow-name>.yml. Você pode exibir seus aplicativos autorizados e revogar permissões em sua conta, na seção de Integrações>Aplicativos.

Captura de tela que mostra o local dos aplicativos autorizados para um usuário no GitHub.

Solucionar 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 obtidos ao configurar uma entidade de serviço usando o comando az ad sp create-for-rba da CLI do Azure.

Se você receber um erro que contenha "InvalidSchema: nenhum adaptador de conexão foi encontrado":

Se você receber um erro que contenha "Mais de um aplicativo tem o mesmo nome de exibição":

  • O nome já foi usado para a entidade de serviço. Escolha outro nome ou deixe de fora o argumento --name. Um GUID será gerado automaticamente como um 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 do repositório:

  • Se houver um fluxo de trabalho com falha, examine o arquivo do fluxo de trabalho. Deve haver dois trabalhos: criar e implantar. Para um trabalho com falha, verifique os resultados das tarefas do trabalho em busca de problemas.
  • Se houver uma mensagem de erro que contenha "Tempo limite de handshake do TLS", execute o fluxo de trabalho manualmente. No repositório, na guia 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/<workflow-name>.yml) será criado automaticamente para você. Você não deve precisar modificar este arquivo para este tutorial. Se você fez isso, reverta suas alterações e tente o fluxo de trabalho.

O site não mostra as alterações que você mesclou no branch principal

No GitHub:

  • Verifique se o fluxo de trabalho do GitHub Actions foi executado e se você verificou a alteração no branch que dispara o fluxo de trabalho.

No portal do Azure:

  • 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 a alteração no branch.

  • Verifique os logs do aplicativo de contêiner para ver se há um erro de programação:

    1. Vá para o aplicativo de container e depois vá para Gerenciamento de revisão><container ativo>>Detalhes da revisão>Logs do console.
    2. Escolha a ordem das colunas para mostrar o Hora da Geração, Stream_s e Log_s.
    3. Classifique os logs pelo mais recente e procure mensagens de stderr e stdout do Python na coluna Stream_s. A saída do Python print são mensagens stdout.

Na CLI do Azure:

Você deseja interromper a implantação contínua

Parar a implantação contínua significa desconectar seu aplicativo de contêiner do repositório.

No portal do Azure:

  • Vá para o aplicativo de contêiner. No menu de serviço, selecione Implantação contínua e, em seguida, selecione Desconectar.

Na CLI do Azure:

Depois de desconectar:

  • O arquivo .github/workflows/<workflow-name>.yml foi 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 fica 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 peguem 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ê terminar a série de tutoriais e não quiser 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 Tutorial de limpeza de contêineres.

Se você planeja criar este tutorial, aqui estão algumas próximas etapas que você pode executar: