|
|
#!/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"
|
|
|
|