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 do Registro de Contêiner do Azure gerenciado ou do Hub do Docker.

1. Acessar a Central de Implantação

No portal do Azure, navegue até a página de gerenciamento do seu aplicativo no Serviço de Aplicativo do Azure.

No menu à esquerda, clique em Central de Implantação>Configurações.

2. Escolher a fonte de implantação

Escolha a origem da implantação que depende do seu cenário:

  • O Registro de contêiner configura o CI/CD entre o registro de contêiner e o Serviço de Aplicativo.
  • A opção GitHub Actions é a indicada se você mantiver o código-fonte da sua imagem de contêiner no GitHub. Disparado por novas confirmações no repositório GitHub, a ação implantar pode executar docker build e docker push diretamente no registro de 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 o GitHub Actions.
  • Para configurar o CI/CD com Azure Pipelines, consulte implantar um contêiner de aplicativo Web do Azure do Azure pipelines.

Observação

Para um aplicativo Docker Compose, selecione Registro de Contêiner.

Se você escolher o GitHub Actions, clique emAutorizar e siga os prompts de autorização. Se você já tiver autorizado com o GitHub antes, poderá implantar 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órioe a Ramificação de onde serão implantadas.

2. Definir as configurações do registro

3. Configurar as configurações do registro

Observação

Os contêineres Sidecar (versão prévia) sucederão os aplicativos com vários contêineres (Docker Compose) no Serviço de Aplicativo. Para começar, confira Tutorial: configurar um contêiner sidecar para contêiner personalizado no Serviço de Aplicativo do Azure (versão prévia).

Para implantar um aplicativo de vários contêineres (Docker Compose), selecioneDocker Compose em Tipo de Contêiner.

Se você não vir o menu suspenso Tipo de Contêiner, role de volta para a Origem e selecioneRegistro de Contêiner.

Em Origem do registro, selecione onde está o registro de contêiner. Se não for nem o Registro de Contêiner do Azure nem o Docker Hub, selecioneRegistro Privado.

Observação

Se o 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 o aplicativo de vários contêineres usar apenas imagens públicas, selecioneDocker Hub, mesmo que algumas imagens não estejam no Docker Hub.

Siga as próximas etapas selecionando a guia que corresponde à sua escolha.

O menu suspenso Registro exibe os registros na mesma assinatura que seu aplicativo. Selecione o registro que deseja.

Observação

Selecione a Imagem e a Marca a serem implantadas. Se desejar, digite o comando de inicialização no Arquivo de Inicialização.

Siga a próxima etapa, dependendo do Tipo de Contêiner:

  • Para o Docker Compose, selecione o registro para suas imagens privadas. Clique emEscolher arquivo para carregar o arquivo do Docker Composeou apenas cole o conteúdo do arquivo do Docker Compose na Configuração.
  • Para Contêiner Único, selecione a Imagem e a Marca a serem implantadas. Se desejar, digite o comando de inicialização no 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. Habilitar CI/CD

4. habilitar 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.

Observação

Se você selecionar GitHub Actions na Origem, não terá essa opção porque o CI/CD é manipulado pelas ações do GitHub Actions diretamente. Em vez disso, você verá uma seção Configuração de Fluxo de Trabalho, em que você pode clicar emVisualizar arquivo para inspecionar o arquivo de fluxo de trabalho. O Azure confirma esse arquivo no repositório de origem do GitHub selecionado para manipular tarefas de compilação e implantação. Para obter mais informações, consulte Como o CI/CD funciona com o GitHub Actions.

Quando você habilita essa opção, o Serviço de Aplicativo adiciona um webhook ao repositório no Registro de Contêiner do Azure ou no Docker Hub. Seu repositório é postado para este webhook sempre que a imagem selecionada é atualizada com o docker push. O webhook faz com que o Serviço de Aplicativo seja reiniciado e execute o docker pull para obter a imagem atualizada.

Observação

Para garantir o funcionamento adequado do webhook, é essencial habilitar a opção Credenciais Básicas de Publicação de Autenticação no seu Aplicativo Web. Se você não fizer isso, pode resultar em um erro não autorizado 401 para o webhook. Para verificar se a opção Credenciais Básicas de Publicação de Autenticação está habilitada, siga estas etapas:

  • Navegue até a Configuração > Configurações Gerais do seu Aplicativo Web.
  • Procure a seção Configuração da Plataforma, na qual você encontrará a opção Credenciais Básicas de Publicação de Autenticação.

Para outros registros privados, seu pode postar no webhook manualmente ou como uma etapa em um pipeline de CI/CD. Na URL do Webhook, clique no botão Copiar para obter a URL do webhook.

Observação

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 o escopo. Um docker push para qualquer repositório no registro (incluindo aqueles que não são referenciados pelo arquivo de Docker Compose) dispara uma reinicialização do aplicativo. Talvez você queira modificar o webhook para um escopo mais estreito.
  • O Docker Hub não dá suporte a webhooks no nível do registro. Você deve adicionar os webhooks manualmente às imagens especificadas no arquivo do Docker Compose.

4. Salve suas configurações

5. Salve suas configurações

Clique emSalvar.

Como o CI/CD funciona com o GitHub Actions

Se você escolher o GitHub Actions na Origem (consulte Escolher origem da implantação), o Serviço de Aplicativo configurará CI/CD das seguintes maneiras:

  • Deposita um arquivo de fluxo de trabalho do GitHub Actions em seu repositório GitHub para lidar com tarefas de compilação e implantação no Serviço de Aplicativo.
  • Adiciona as credenciais para o registro privado como segredos do GitHub. O arquivo de fluxo de trabalho gerado executa a ação Azure/logon do docker para entrar com seu registro privado e, em seguida, executa docker push para implantá-lo.
  • Adiciona o perfil de publicação para 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-implantar para configurar a imagem atualizada, que dispara uma reinicialização do aplicativo para efetuar o pull da imagem atualizada.
  • Captura informações dos logs de execução de fluxo de trabalho e exibe-as na guia Logs no Centro de Implantaçãodo seu aplicativo.

Você pode personalizar o provedor de compilação GitHub Actions como a seguir:

  • Personalize o arquivo de fluxo de trabalho depois que ele for gerado no repositório GitHub. Para obter mais informações, consulte Sintaxe do fluxo de trabalho para o GitHub Actions. Apenas certifique-se de que o fluxo de trabalho termine com a ação Azure/webapps-implantar para disparar 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 no repositório manualmente. Esse método não lhe dá a integração de log com o portal do Azure.
  • Em vez de um perfil de publicação, faça a implantação com uma entidade de serviço no Microsoft Entra ID.

Autenticação 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 seguinte exemplo, substitua <subscription-id>, <group-name> e <app-name> por seus 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

Para fins de segurança, conceda o acesso mínimo necessário à entidade de serviço. O escopo do exemplo anterior é limitado especificamente ao aplicativo do serviço de aplicativo, não a todo o grupo de recursos.

No GitHub, navegue até o repositório, e, em seguida, selecioneConfigurações > Segredos > Adicionar um novo segredo. Cole toda a saída JSON do comando da CLI do Azure no campo de valor do segredo. ao segredo o nome como AZURE_CREDENTIALS.

No arquivo de fluxo de trabalho gerado pela Central de Implantação, revise a azure/webapps-deploy etapa com um 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

Automatização com a 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 de Docker Compose localmente e, em seguida, executeaz webapp config container set com o parâmetro --multicontainer-config-file. Se o arquivo do 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 URL do webhook, mas você deve criar o webhook no registro manualmente em uma etapa separada. O exemplo a seguir habilita o 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