Partilhar via


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.

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

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.

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
  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 (propriedadeappId), o segredo do cliente (propriedadepassword) e a ID do locatário (propriedadetenant).

  2. 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 ou https://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 comando az ad sp create-for-rbac anterior. O ID é um GUID do formato 00000000-0000-0000-0000-00000000.
    • <o ID do locatário> é 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.
    • < > segredo-do-cliente é o valor da propriedade password do comando az ad sp create-for-rbac anterior.

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.

  1. Vá para a bifurcação do repositório de exemplo e comece na ramificação principal .

    Captura de tela que mostra o ramo principal em uma bifurcação do repositório de amostra.

  2. Faça uma alteração:

    1. Vá para o arquivo /templates/ base.html. (Para 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 está a editar, certifique-se de que Confirmar diretamente na ramificação principal está selecionado. Em seguida, selecione o botão Confirmar alterações.

    Imagem que mostra seleções para confirmar uma alteração num ficheiro de modelo no fork do repositório de exemplo.

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 . Em fluxos de trabalho de software típicos, você faz uma alteração em uma ramificação diferente de principal e, em seguida, cria uma solicitação pull para mesclar a alteração em principal. As solicitações pull também iniciam o fluxo de trabalho.

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.

No GitHub , vá para a sua bifurcação do repositório de exemplo e abra o separador Ações.

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

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 do repositório, em SegurançaSegredos e variáveisAções.

Captura de tela que mostra credenciais como segredos de Ações do GitHub.

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.

Captura de tela que mostra a localização de aplicativos autorizados para um usuário no GitHub.

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":

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 do repositório:

  • 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:

    1. 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.
    2. Escolha a ordem das colunas para mostrar Hora de Geração, Stream_se Log_s.
    3. Classifique os logs por mais recentes e procure mensagens Python stderr e stdout na coluna Stream_s. A saída Python print é de stdout mensagens.

Na CLI do Azure:

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:

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.

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