Skip to content

cristopherpds/tcc-app

Repository files navigation

tcc-app

Aplicação de demonstração usada como prova de conceito (PoC) do TCC "GitOps: Automação e Gestão de Infraestrutura utilizando Repositórios Git".

Este repositório contém o código-fonte da aplicação e o pipeline de Integração Contínua (CI). Ele faz parte de uma arquitetura de dois repositórios:

Repositório Responsabilidade
tcc-app (este) Código da aplicação, Dockerfile e workflow de CI que constrói/publica a imagem
tcc-ops Repositório GitOps: manifestos declarativos do Kubernetes monitorados pelo ArgoCD

A separação entre código e configuração de infraestrutura é proposital — segue o princípio GitOps de manter o repositório Git como única fonte de verdade (single source of truth).

A aplicação

API HTTP escrita em Python + FastAPI, servida por Uvicorn na porta 8080. Combina endpoints de diagnóstico (úteis para observar o comportamento em Kubernetes) com alguns endpoints que consomem APIs públicas.

Endpoints

Diagnóstico / observabilidade

Método Rota Descrição
GET / Mensagem de boas-vindas + versão, instância, pod e uptime
GET /version Versão da aplicação e ID da instância
GET /whoami Identificação do pod/nó que respondeu
GET /health/live Liveness probe
GET /health/ready Readiness probe
GET /config Variáveis de ambiente carregadas
GET /environment Indica se está rodando localmente ou em GKE
GET /feature/experimental Endpoint usado para evidenciar mudanças entre versões

Consumo de APIs externas

Método Rota Fonte
GET /users/random randomuser.me
GET /users/nationality/{nat} randomuser.me (ex.: br, us)
GET /predict/age/{name} agify.io
GET /pokemon/{name} pokeapi.co
GET /crypto/bitcoin coingecko.com

As variáveis POD_NAME, PROJECT_ID e ENV são lidas em runtime e injetadas pelo Kubernetes em produção; localmente ficam ausentes, e por isso /environment reporta environment: local.

Rodando localmente

Pré-requisitos

  • Python 3.12+
  • pip

Com Python (virtualenv)

# criar e ativar o ambiente virtual
python -m venv .venv
source .venv/bin/activate        # Windows (PowerShell): .venv\Scripts\Activate.ps1

# instalar dependências
pip install -r requirements.txt

# subir a aplicação (--reload recarrega ao salvar arquivos)
uvicorn main:app --host 0.0.0.0 --port 8080 --reload

A API fica disponível em http://localhost:8080.

Com Docker

# construir a imagem
docker build -t tcc-app:local .

# executar o contêiner
docker run --rm -p 8080:8080 tcc-app:local

Testando

Documentação interativa (Swagger UI) gerada automaticamente pelo FastAPI:

http://localhost:8080/docs

Ou via curl:

curl http://localhost:8080/
curl http://localhost:8080/environment
curl http://localhost:8080/pokemon/pikachu
curl http://localhost:8080/users/nationality/br

Pipeline de CI

O workflow .github/workflows/deploy.yml é disparado ao publicar uma tag v* (ou manualmente via workflow dispatch) e executa:

  1. Checkout do código-fonte
  2. Build da imagem Docker
  3. Autenticação no GitHub Container Registry (GHCR)
  4. Push da imagem ghcr.io/<owner>/tcc-app:<tag>
  5. Atualização automática da tag da imagem no deployment.yml do repositório tcc-ops (branch deploy/app)

A partir daí o ArgoCD detecta a mudança no repositório GitOps e reconcilia o estado do cluster — completando o fluxo CI/CD baseado em GitOps.

Como gerar uma release

git tag v0.2.5
git push origin v0.2.5

O campo APP_VERSION em main.py deve ser atualizado junto da tag para que a aplicação reporte a versão correta nos endpoints de diagnóstico.

Secrets necessários

Secret Uso
GHC_PAT Login no GHCR para publicar a imagem
PAT Token com permissão de escrita no repositório tcc-ops

About

TCC aplicação

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors