121 lines
3.9 KiB
YAML
121 lines
3.9 KiB
YAML
name: Deploy WiFi-ETL Prod
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: vm-prod
|
|
|
|
steps:
|
|
|
|
- name: Preparar ambiente
|
|
run: |
|
|
mkdir -p /home/desenvolvimento/wifi-etl
|
|
chown $(whoami):$(whoami) /home/desenvolvimento/wifi-etl
|
|
|
|
|
|
- name: Garantindo safe directory
|
|
run: |
|
|
git config --global --add safe.directory /home/desenvolvimento/wifi-etl
|
|
|
|
- name: Clone/Update código
|
|
run: |
|
|
set -e
|
|
if [ -d /home/desenvolvimento/wifi-etl/.git ]; then
|
|
cd /home/desenvolvimento/wifi-etl
|
|
git fetch origin
|
|
git reset --hard origin/main
|
|
git clean -fd
|
|
else
|
|
git clone http://10.0.120.75:3030/Sothis/wifi-etl.git /home/desenvolvimento/wifi-etl
|
|
fi
|
|
echo "✓ Código atualizado"
|
|
|
|
- name: Copiar .env
|
|
run: |
|
|
echo "Rodando como: $(whoami)"
|
|
echo "Listando diretório:"
|
|
ls -la /home/desenvolvimento/.envs/wifi_etl/ || echo "ERRO: sem acesso ao diretório"
|
|
cp /etc/wifi-etl/.env /home/desenvolvimento/wifi-etl/.env
|
|
echo "✓ .env copiado"
|
|
|
|
- name: Build e deploy container
|
|
run: |
|
|
set -e
|
|
cd /home/desenvolvimento/wifi-etl
|
|
docker system prune -f || true
|
|
docker-compose -f infra/docker-compose.prod.yml down || true
|
|
docker-compose -f infra/docker-compose.prod.yml build --no-cache
|
|
docker-compose -f infra/docker-compose.prod.yml up -d
|
|
echo "✓ Container iniciado"
|
|
|
|
- name: Aguardar inicialização
|
|
run: sleep 5
|
|
|
|
- name: Validar saúde - CRON
|
|
run: |
|
|
echo "--- Processos no container ---"
|
|
docker exec wifi_etl_worker ps aux
|
|
echo ""
|
|
echo "--- Status do cron ---"
|
|
if docker exec wifi_etl_worker ps aux | grep -v grep | grep -q cron; then
|
|
echo "✓ Cron rodando"
|
|
else
|
|
echo "✗ Cron NÃO encontrado"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
echo "--- Próximas execuções agendadas ---"
|
|
docker exec wifi_etl_worker crontab -l || true
|
|
|
|
- name: Validar saúde - Database
|
|
run: |
|
|
echo "--- Testando conexão com o banco ---"
|
|
docker exec wifi_etl_worker python3 << 'PYEOF'
|
|
import psycopg2, os, sys
|
|
|
|
host = os.getenv('DB_HOST', 'N/A')
|
|
port = os.getenv('DB_PORT', '5432')
|
|
dbname = os.getenv('DB_NAME', 'N/A')
|
|
user = os.getenv('DB_USER', 'N/A')
|
|
|
|
print(f" Host: {host}:{port}")
|
|
print(f" Database: {dbname}")
|
|
print(f" User: {user}")
|
|
print("")
|
|
|
|
try:
|
|
conn = psycopg2.connect(
|
|
host=host, port=int(port),
|
|
dbname=dbname, user=user,
|
|
password=os.getenv('DB_PASSWORD'),
|
|
connect_timeout=5
|
|
)
|
|
cur = conn.cursor()
|
|
cur.execute("SELECT version();")
|
|
version = cur.fetchone()[0]
|
|
cur.execute("SELECT COUNT(*) FROM users;")
|
|
users = cur.fetchone()[0]
|
|
cur.execute("SELECT COUNT(*) FROM sessions;")
|
|
sessions = cur.fetchone()[0]
|
|
cur.execute("SELECT last_run_at FROM watermarks ORDER BY last_run_at DESC LIMIT 1;")
|
|
last_run = cur.fetchone()
|
|
print(f"✓ Banco conectado")
|
|
print(f" PostgreSQL: {version[:50]}")
|
|
print(f" Usuários: {users}")
|
|
print(f" Sessões: {sessions}")
|
|
print(f" Último ETL: {last_run[0] if last_run else 'nunca'}")
|
|
cur.close()
|
|
conn.close()
|
|
except Exception as e:
|
|
print(f"✗ Erro: {e}")
|
|
sys.exit(1)
|
|
PYEOF
|
|
|
|
- name: Verificar logs iniciais
|
|
if: always()
|
|
run: |
|
|
docker logs --tail 20 wifi_etl_worker || true |