Skip to content

⚙️ [Issue] Setup de CI/CD com GitHub Actions #8

@OtavioXimarelli

Description

@OtavioXimarelli

🚀 Aprimorar Pipeline de CI/CD com Testes, Análise e Estratégia de Deploy

Labels: devops enhancement ci-cd


📌 Contexto

Atualmente, o projeto possui dois workflows básicos no GitHub Actions:

  • docker-image.yml: Realiza o build do projeto (mvn clean package) e constrói uma imagem Docker a cada push ou pull_request na branch master.
  • maven-publish.yml: Publica o pacote no GitHub Packages quando uma nova release é criada.

Embora funcionais, esses workflows podem ser aprimorados para garantir maior qualidade e confiabilidade do código, além de estabelecer um fluxo completo de Entrega Contínua (CD) para um ambiente de staging ou produção.


🎯 Objetivo

Evoluir o CI/CD atual para um pipeline mais maduro e automatizado, incorporando testes, caching de dependências, publicação de imagens em registro e estratégia de deploy.


📋 Tarefas a Serem Executadas

1. Aprimorar o Workflow de CI (docker-image.yml)

  • Executar Testes Unitários
    Adicionar etapa para executar os testes antes do build:
    - name: Run Unit Tests
      run: mvn -B test --file pom.xml

Adicionar Cache de Dependências Maven
Acelerar o workflow com cache de dependências:

yaml
Copy
Edit

  • name: Cache Maven packages
    uses: actions/cache@v3
    with:
    path: ~/.m2
    key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
    restore-keys: ${{ runner.os }}-m2
    Publicar Imagem no GHCR (GitHub Container Registry)
    Substituir o build local por publicação em repositório de contêiner:

yaml
Copy
Edit

  • name: Log in to GitHub Container Registry
    uses: docker/login-action@v2
    with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GITHUB_TOKEN }}

  • name: Build and push Docker image
    uses: docker/build-push-action@v4
    with:
    context: .
    push: true
    tags: ghcr.io/${{ github.repository }}:${{ github.sha }}

  1. Criar um Workflow de CD (Continuous Deployment)
    Definir um Novo Workflow (deploy.yml)
    Responsável por realizar o deploy da imagem Docker publicada.

Escolher o Gatilho (Trigger)
Exemplos:

Push para branch main/master (deploy em staging)

Criação de uma nova release (deploy em produção)

Definir o Ambiente de Deploy
Exemplos de destino:

Google Cloud Run (simples e escalável)

AWS ECS ou EKS (mais robusto)

Servidor VPS via SSH (mais tradicional)

Utilizar GitHub Secrets
Armazenar tokens e chaves de acesso com segurança: GCP_SA_KEY, AWS_ACCESS_KEY_ID, etc.

✅ Critérios de Aceitação
CI executa testes, builda imagem e publica no GHCR a cada push para master.

CD é acionado automaticamente por release e realiza deploy em produção com sucesso.

compose.yaml atualizado para consumir imagem do GHCR.

README.md atualizado com:

Badge de status do workflow

Instruções sobre o novo processo de deploy

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions