Implantação contínua com contêineres personalizados no Serviço de Aplicativo do Azure
Neste tutorial, você configura a implantação contínua para uma imagem de contêiner personalizada de repositórios gerenciados do Registro de Contêiner do Azure ou do Docker Hub.
1. Vá para o Centro de Implantação
No portal do Azure, navegue até a página de gerenciamento do seu aplicativo do Serviço de Aplicativo.
No menu à esquerda, clique em Configurações do Centro>de Implantação.
2. Escolha a origem da implantação
A escolha da fonte de implantação depende do seu cenário:
- O Registro de contêiner configura CI/CD entre o Registro de contêiner e o Serviço de Aplicativo.
- A opção Ações do GitHub é para você se você mantiver o código-fonte da imagem do contêiner no GitHub. Acionada por novas confirmações no repositório GitHub, a ação de implantação pode ser executada
docker build
edocker push
diretamente no registro do contêiner e, em seguida, atualizar o aplicativo do Serviço de Aplicativo para executar a nova imagem. Para obter mais informações, consulte Como o CI/CD funciona com as ações do GitHub. - Para configurar o CI/CD com o Azure Pipelines, consulte Implantar um contêiner do Azure Web App a partir do Azure Pipelines.
Nota
Para um aplicativo Docker Compose, selecione Registro de contêiner.
Se você escolher Ações do GitHub, clique em Autorizar e siga as instruções de autorização. Se você já autorizou com o GitHub antes, pode implantar a partir do repositório de um usuário diferente clicando em Alterar conta.
Depois de autorizar sua conta do Azure com o GitHub, selecione a Organização, o Repositório e a Filial a serem implantados.
2. Definir definições de registo
3. Definir definições de registo
Nota
Os contêineres de sidecar (visualização) terão êxito aos aplicativos de vários contêineres (Docker Compose) no Serviço de Aplicativo. Para começar, consulte Tutorial: Configurar um contêiner sidecar para contêiner personalizado no Serviço de Aplicativo do Azure (visualização).
Para implantar um aplicativo de vários contêineres (Docker Compose), selecione Docker Compose em Tipo de contêiner.
Se você não vir a lista suspensa Tipo de contêiner, role novamente até Origem e selecione Registro de contêiner.
Em Origem do Registro, selecione onde está o registro do contêiner. Se não for nem o Registro de Contêiner do Azure nem o Hub do Docker, selecione Registro Privado.
Nota
Se seu aplicativo de vários contêineres (Docker Compose) usar mais de uma imagem privada, verifique se as imagens privadas estão no mesmo registro privado e acessíveis com as mesmas credenciais de usuário. Se seu aplicativo de vários contêineres usar apenas imagens públicas, selecione Docker Hub, mesmo que algumas imagens não estejam no Docker Hub.
Siga os próximos passos, selecionando o separador que corresponde à sua escolha.
A lista suspensa Registro exibe os registros na mesma assinatura do seu aplicativo. Selecione o registro desejado.
Nota
- Se quiser usar identidades gerenciadas para bloquear o acesso ACR, siga este guia:
- Para implantar a partir de um Registro em uma assinatura diferente, selecione Registro Privado na origem do Registro.
Selecione a Imagem e a Tag a serem implantadas. Se desejar, digite o comando start up em Arquivo de inicialização.
Siga a próxima etapa, dependendo do tipo de contêiner:
- Para Docker Compose, selecione o registro para suas imagens privadas. Clique em Escolher arquivo para carregar o arquivo Docker Compose ou simplesmente cole o conteúdo do arquivo Docker Compose no Config.
- Em Contêiner único, selecione a Imagem e a Tag a serem implantadas. Se desejar, digite o comando start up em Arquivo de inicialização.
O Serviço de Aplicativo acrescenta a cadeia de caracteres no Arquivo de Inicialização ao final do docker run
comando (como o [COMMAND] [ARG...]
segmento) ao iniciar o contêiner.
3. Ativar CI/CD
4. Ativar CI/CD
O Serviço de Aplicativo dá suporte à integração de CI/CD com o Registro de Contêiner do Azure e o Docker Hub. Para habilitá-lo, selecione Ativado em Implantação contínua.
Nota
Se você selecionar Ações do GitHub na Origem, não obterá essa opção porque o CI/CD é manipulado diretamente pelas Ações do GitHub. Em vez disso, você verá uma seção Configuração do fluxo de trabalho, onde você pode clicar em Visualizar arquivo para inspecionar o arquivo de fluxo de trabalho. O Azure confirma esse arquivo em seu repositório de origem GitHub selecionado para lidar com tarefas de compilação e implantação. Para obter mais informações, consulte Como o CI/CD funciona com as ações do GitHub.
Quando você habilita essa opção, o Serviço de Aplicativo adiciona um webhook ao seu repositório no Registro de Contêiner do Azure ou no Hub do Docker. Seu repositório posta neste webhook sempre que a imagem selecionada é atualizada com docker push
. O webhook faz com que seu aplicativo do Serviço de Aplicativo seja reiniciado e executado docker pull
para obter a imagem atualizada.
Nota
Para garantir o funcionamento adequado do webhook, é essencial habilitar a opção Basic Auth Publishing Credentials em seu Web App. A falha em fazê-lo pode resultar em um erro não autorizado 401 para o webhook. Para verificar se Basic Auth Publishing Credentials está habilitado, execute estas etapas:
- Navegue até as Configurações Gerais de Configuração > do seu aplicativo Web.
- Procure a seção Configuração da plataforma, onde você encontrará a opção Basic Auth Publishing Credentials.
Para outros registros privados, você pode postar no webhook manualmente ou como uma etapa em um pipeline de CI/CD. No URL do Webhook, clique no botão Copiar para obter o URL do Webhook.
Nota
O suporte para aplicativos de vários contêineres (Docker Compose) é limitado:
- Para o Registro de Contêiner do Azure, o Serviço de Aplicativo cria um webhook no registro selecionado com o registro como escopo. A
docker push
para qualquer repositório no Registro (incluindo aqueles não referenciados pelo arquivo Docker Compose) dispara uma reinicialização do aplicativo. Você pode querer modificar o webhook para um escopo mais restrito. - O Docker Hub não suporta webhooks no nível do Registro. Você deve adicionar os webhooks manualmente às imagens especificadas no arquivo Docker Compose.
4. Salve suas configurações
5. Salve suas configurações
Clique em Salvar.
Como o CI/CD funciona com as ações do GitHub
Se você escolher Ações do GitHub na origem (consulte Escolher fonte de implantação), o Serviço de Aplicativo configurará o CI/CD das seguintes maneiras:
- Deposita um arquivo de fluxo de trabalho do GitHub Actions em seu repositório do GitHub para lidar com tarefas de compilação e implantação no Serviço de Aplicativo.
- Adiciona as credenciais para seu registro privado como segredos do GitHub. O arquivo de fluxo de trabalho gerado executa a ação Azure/docker-login para entrar com seu registro privado e, em seguida, é executado
docker push
para implantar nele. - Adiciona o perfil de publicação do seu aplicativo como um segredo do GitHub. O arquivo de fluxo de trabalho gerado usa esse segredo para autenticar com o Serviço de Aplicativo e, em seguida, executa a ação Azure/webapps-deploy para configurar a imagem atualizada, que aciona uma reinicialização do aplicativo para obter a imagem atualizada.
- Captura informações dos logs de execução do fluxo de trabalho e as exibe na guia Logs no Centro de Implantação do seu aplicativo.
Você pode personalizar o provedor de compilação do GitHub Actions das seguintes maneiras:
- Personalize o arquivo de fluxo de trabalho depois que ele for gerado no repositório do GitHub. Para obter mais informações, consulte Sintaxe do fluxo de trabalho para ações do GitHub. Apenas certifique-se de que o fluxo de trabalho termina com a ação Azure/webapps-deploy para acionar uma reinicialização do aplicativo.
- Se a ramificação selecionada estiver protegida, você ainda poderá visualizar o arquivo de fluxo de trabalho sem salvar a configuração e, em seguida, adicioná-lo e os segredos necessários do GitHub ao repositório manualmente. Esse método não fornece a integração de log com o portal do Azure.
- Em vez de um perfil de publicação, implante usando uma entidade de serviço no Microsoft Entra ID.
Autenticar com uma entidade de serviço
Essa configuração opcional substitui a autenticação padrão por perfis de publicação no arquivo de fluxo de trabalho gerado.
Gere uma entidade de serviço com o comando az ad sp create-for-rbac na CLI do Azure. No exemplo a seguir, substitua subscription-id>,< group-name> e <app-name> por seus próprios valores.< Salve toda a saída JSON para a próxima etapa, incluindo o nível {}
superior .
az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
Importante
Por segurança, conceda o acesso mínimo necessário à entidade de serviço. O escopo no exemplo anterior é limitado ao aplicativo do Serviço de Aplicativo específico e não a todo o grupo de recursos.
No GitHub, navegue até o repositório e selecione Configurações > Segredos > Adicionar um novo segredo. Cole toda a saída JSON do comando CLI do Azure no campo de valor do segredo. Dê ao segredo um nome como AZURE_CREDENTIALS
.
No arquivo de fluxo de trabalho gerado pelo Centro de Implantação, revise a azure/webapps-deploy
etapa com código como o exemplo a seguir:
- name: Sign in to Azure
# Use the GitHub secret you added
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
with:
app-name: '<app-name>'
slot-name: 'production'
images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
- name: Sign out of Azure
run: |
az logout
Automatize com CLI
Para configurar o registro de contêiner e a imagem do Docker, execute az webapp config container set.
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'
Para configurar um aplicativo de vários contêineres (Docker Compose), prepare um arquivo Docker Compose localmente e, em seguida , execute az webapp config container set com o --multicontainer-config-file
parâmetro. Se o arquivo Docker Compose contiver imagens privadas, adicione --docker-registry-server-*
parâmetros como mostrado no exemplo anterior.
az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>
Para configurar o CI/CD do registro de contêiner para seu aplicativo, execute az webapp deployment container config com o --enable-cd
parâmetro. O comando gera a saída da URL do webhook, mas você deve criar o webhook no seu registro manualmente em uma etapa separada. O exemplo a seguir habilita CI/CD em seu aplicativo e, em seguida, usa a URL do webhook na saída para criar o webhook no Registro de Contêiner do Azure.
ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)
az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'
Mais recursos
- Azure Container Registry
- Criar uma aplicação Web .NET Core no Serviço de Aplicações no Linux
- Guia de início rápido: executar um contêiner personalizado no Serviço de Aplicativo
- FAQ do Serviço de Aplicações no Linux
- Configurar contêineres personalizados
- Fluxos de trabalho de ações para implantar no Azure