You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/deploy.sh

124 lines
3.8 KiB
Bash

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#!/bin/bash
# Script de deploy para Google Cloud Run com Artifact Registry
# Uso: ./deploy.sh
# Pré-requisitos:
# - gcloud CLI autenticado e com projeto principal setado
# - Artifact Registry Repository já criado (orquestrador)
# - Service Account com roles: Cloud SQL Client, Cloud Run Developer, Artifact Registry Writer
set -e
# Detectar configuração do gcloud
PROJECT_ID=$(gcloud config get-value project)
REGION="us-central1"
SERVICE_NAME="orquestrador"
REPO_NAME="orquestrador"
IMAGE_NAME="$REGION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$SERVICE_NAME"
if [ -z "$PROJECT_ID" ]; then
echo "❌ Projeto não configurado. Execute: gcloud config set project <seu-projeto>"
exit 1
fi
echo "🚀 Iniciando deploy para Google Cloud Run"
echo "📦 Projeto: $PROJECT_ID"
echo "🌍 Região: $REGION"
echo "🏗️ Repositório: $REPO_NAME"
# Passo 1: Validar autenticação
echo ""
echo "1⃣ Verificando autenticação GCP..."
ACTIVE_ACCOUNT=$(gcloud auth list --filter=status:ACTIVE --format="value(account)")
if [ -z "$ACTIVE_ACCOUNT" ]; then
echo "❌ Nenhuma conta autenticada. Execute: gcloud auth login"
exit 1
fi
echo "✅ Autenticado como: $ACTIVE_ACCOUNT"
# Passo 2: Habilitar APIs
echo ""
echo "2⃣ Habilitando APIs necessárias..."
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
aiplatform.googleapis.com \
sqladmin.googleapis.com \
--quiet
echo "✅ APIs habilitadas"
# Passo 3: Build com Cloud Build
echo ""
echo "3⃣ Fazendo build da imagem Docker com Cloud Build..."
gcloud builds submit \
--config=cloudbuild.yaml \
--substitutions=_REGION="$REGION",_REPO_NAME="$REPO_NAME",_IMAGE_NAME="$SERVICE_NAME"
echo "✅ Build concluído"
# Passo 4: Deploy para Cloud Run com variáveis de ambiente
echo ""
echo "4⃣ Realizando deploy para Cloud Run com variáveis de ambiente..."
# Ler variáveis do .env (excluindo comentários e linhas vazias, e tratando espaços/caracteres especiais)
ENV_VARS=""
while IFS= read -r line || [[ -n "$line" ]]; do
# Ignorar linhas vazias e comentários
[[ "$line" =~ ^[[:space:]]*# ]] && continue
[[ -z "${line// }" ]] && continue
# Adicionar à string de variáveis (key=value) e remover \r (quebras de linha Windows)
if [[ "$line" == *"="* ]]; then
# Limpar caracteres de retorno de carro (\r) para evitar erros no Linux
clean_line=$(echo "$line" | tr -d '\r')
ENV_VARS="$ENV_VARS$clean_line,"
fi
done < .env
# Remover última vírgula
ENV_VARS="${ENV_VARS%,}"
if [ -z "$ENV_VARS" ]; then
echo "⚠️ Nenhuma variável de ambiente encontrada em .env"
# Deploy sem variáveis (pode falhar se a app exigir)
gcloud run deploy "$SERVICE_NAME" \
--image="$IMAGE_NAME:latest" \
--region="$REGION" \
--platform=managed \
--allow-unauthenticated
else
# Deploy com as variáveis coletadas
gcloud run deploy "$SERVICE_NAME" \
--image="$IMAGE_NAME:latest" \
--region="$REGION" \
--platform=managed \
--set-env-vars="$ENV_VARS" \
--memory=512Mi \
--cpu=1 \
--timeout=3600 \
--max-instances=10 \
--allow-unauthenticated
fi
echo "✅ Deploy concluído com variáveis de ambiente"
# Passo 5: Sucesso
echo ""
echo "================================"
echo "✅ PROCESSO FINALIZADO!"
echo "================================"
echo ""
echo "📋 Próximos passos:"
echo ""
echo "1. Verifique o status:"
echo " gcloud run services describe $SERVICE_NAME --region=$REGION"
echo ""
echo "2. Obtenha a URL da aplicação:"
echo " gcloud run services describe $SERVICE_NAME --region=$REGION --format='value(status.url)'"
echo ""
echo "3. Teste a API:"
echo " curl https://<url-do-seu-servico>/docs"
echo ""
echo "4. Visualize logs:"
echo " gcloud run services logs read $SERVICE_NAME --region=$REGION --limit=50"