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 e docker 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 emAutorizar 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), selecioneDocker Compose em Tipo de contêiner.

Se você não vir a lista suspensa Tipo de contêiner, role novamente até Origem e selecioneRegistro 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, selecioneRegistro 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, selecioneDocker 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

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 emEscolher 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, selecioneAtivado 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 emVisualizar 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 selecioneConfigurações > Segredos > Adicionar um novo segredo. Cole toda a saída JSON do comando CLI do Azure no campo de valor do segredo. 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, executeaz 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 , executeaz 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, executeaz 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