Configurando Deploy Contínuo do GitHub para Azure Container Apps

Configurando Deploy Contínuo do GitHub para Azure Container Apps

Automatizar a compilação e o deploy de aplicações web diretamente do GitHub para o Azure Container Apps é uma prática essencial para pipelines de CI/CD modernos. Este guia detalha o processo de configuração de infraestrutura no Azure e integração com GitHub Actions para realizar deployments contínuos.

1. Provisionamento da Infraestrutura no Azure

Acesse o Portal do Azure e crie um novo Grupo de Recursos. Neste exemplo, utilizaremos o nome my-app-rg. Após a criação, navegue até a aba de Propriedades e copie o ID do Recurso (Resource ID), pois ele será necessário para configurar permissões.

Em seguida, abra o Cloud Shell no Portal do Azure, selecione o ambiente Bash e execute o comando abaixo para criar uma Entidade de Serviço (Service Principal). Isso concederá permissões de Contribuidor ao GitHub Actions para gerenciar os recursos dentro do grupo criado.

az ad sp create-for-rbac \
    --name "my-cicd-service-principal" \
    --role "Contributor" \
    --scopes /subscriptions/<subscription-id>/resourceGroups/my-app-rg \
    --sdk-auth

Guarde a saída JSON deste comando, pois ela contém as credenciais necessárias para a autenticação no GitHub.

2. Configuração do Azure Cnotainer Registry (ACR)

No Portal do Azure, crie um novo Registro de Contêiner (Container Registry) chamado myappregistry. Após o provisionamento, vá até a aba Chaves de acesso (Access keys) e habilite o Usuário administrador (Admin user).

Utilize o Cloud Shell novamente para importar uma imagem de teste para o seu registro, garantnido que o ambiente esteja pronto para os primeiros testes de deploy.

az acr import \
    --name myappregistry \
    --source mcr.microsoft.com/azuredocs/aks-helloworld:v1 \
    --image my-web-app:1.0

3. Criação do Azure Container App

Ainda no Portal, crie um novo Container App com o nome my-container-app. Durante a configuração, selecione o registro myappregistry criado anteriormente e habilite a opção de Ingress (Entrada) para permitir tráfego externo para a aplicação.

4. Integração com GitHub e Configuração de Secrets

Crie um novo repositório no GitHub chamado CustomWebPortal. Vá até as configurações do repositório (Settings), navegue até Secrets and variables > Actions, e crie um novo segredo chamado AZURE_CREDENTIALS. Cole o JSON completo gerado no passo 1 como valor deste segredo.

5. Desenvolvimento da Aplicação e Containerização

Clone o repositório para sua máquina local. Utilize a CLI do .NET para criar uma nova aplicação web ASP.NET Core e adicione um Dockerfile na raiz do projeto para containerizar a aplicação.

# Criar a aplicação .NET
dotnet new webapp -n CustomWebPortal
cd CustomWebPortal

Adicione o seguinte Dockerfile otimizado com multi-stage build para .NET 8:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["CustomWebPortal.csproj", "./"]
RUN dotnet restore "./CustomWebPortal.csproj"
COPY . .
RUN dotnet build "./CustomWebPortal.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./CustomWebPortal.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "CustomWebPortal.dll"]

6. Automação com GitHub Actions

Crie o diretório .github/workflows e adicione o arquivo deploy-aca.yml. Este workflow será acionado a cada push na branch main, compilando a imagem Docker, enviando para o ACR e atualizando o Container App.

name: Build and Deploy to ACA

on:
  push:
    branches: [ "main" ]

env:
  AZURE_RG: my-app-rg
  ACA_NAME: my-container-app
  ACR_NAME: myappregistry
  DOCKER_PATH: ./Dockerfile

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Azure Login
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Build and Push Image to ACR
        uses: azure/cli@v2
        with:
          inlineScript: |
            az acr build \
              --registry ${{ env.ACR_NAME }} \
              --file ${{ env.DOCKER_PATH }} \
              --image ${{ env.ACA_NAME }}:${{ github.sha }} .

      - name: Deploy to Azure Container Apps
        uses: azure/cli@v2
        with:
          inlineScript: |
            az containerapp update \
              --name ${{ env.ACA_NAME }} \
              --resource-group ${{ env.AZURE_RG }} \
              --image ${{ env.ACR_NAME }}.azurecr.io/${{ env.ACA_NAME }}:${{ github.sha }}

7. Execução e Validação

Faça o commmit e push das alterações para o repositório remoto no GitHub. Navegue até a aba Actions para acompanhar a execução do pipeline. Após a conclusão bem-sucedida, retorne ao Portal do Azure, acesse o Container App e clique na URL da Aplicação para visualizar a aplicação web rodando no ambiente production-ready.

Tags: azure-container-apps github-actions ci-cd dotnet Docker

Publicado em 6-28 05:22