image_management_api/scripts/deploy-to-cloud-run.sh
2025-05-23 22:42:22 +02:00

57 lines
1.9 KiB
Bash

#!/bin/bash
set -e
# Default values
PROJECT_ID=${PROJECT_ID:-""}
REGION=${REGION:-"us-central1"}
SERVICE_CONFIG=${SERVICE_CONFIG:-"deployment/cloud-run/service.yaml"}
IMAGE_NAME=${IMAGE_NAME:-"sereact-api"}
IMAGE_TAG=${IMAGE_TAG:-"latest"}
REGISTRY=${REGISTRY:-"gcr.io"}
# Validate required parameters
if [ -z "$PROJECT_ID" ]; then
echo "Error: PROJECT_ID environment variable is required"
echo "Usage: PROJECT_ID=your-project-id ./scripts/deploy-to-cloud-run.sh"
exit 1
fi
# Full image reference
FULL_IMAGE_NAME="${REGISTRY}/${PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}"
# Check if service config exists
if [ ! -f "$SERVICE_CONFIG" ]; then
echo "Error: Service configuration file not found at $SERVICE_CONFIG"
exit 1
fi
# Build the image if BUILD=true
if [ "${BUILD:-false}" = "true" ]; then
echo "Building Docker image: ${FULL_IMAGE_NAME}"
docker build -t "${FULL_IMAGE_NAME}" -f Dockerfile .
echo "Build completed successfully"
fi
# Push the image if PUSH=true
if [ "${PUSH:-false}" = "true" ]; then
echo "Pushing image to registry: ${FULL_IMAGE_NAME}"
docker push "${FULL_IMAGE_NAME}"
echo "Image pushed successfully"
fi
# Update the image in the service configuration
echo "Updating image reference in service configuration..."
TMP_CONFIG=$(mktemp)
sed "s|image: .*|image: ${FULL_IMAGE_NAME}|g" "$SERVICE_CONFIG" > "$TMP_CONFIG"
echo "Deploying to Cloud Run using configuration..."
gcloud run services replace "$TMP_CONFIG" \
--project="$PROJECT_ID" \
--region="$REGION" \
--platform=managed
rm "$TMP_CONFIG"
echo "Deployment completed successfully"
echo "Service URL: $(gcloud run services describe sereact --region=${REGION} --project=${PROJECT_ID} --format='value(status.url)')"
echo "To view logs: gcloud logging read 'resource.type=cloud_run_revision AND resource.labels.service_name=sereact' --project=$PROJECT_ID --limit=10"