#!/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 " 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:///docs" echo "" echo "4. Visualize logs:" echo " gcloud run services logs read $SERVICE_NAME --region=$REGION --limit=50"