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.