الملفات
Complete-CI-CD-Project-pipe…/CICDpipeline.sh
2025-09-25 16:11:56 +03:00

124 أسطر
3.4 KiB
Bash
ملف تنفيذي
خام اللوم التاريخ

هذا الملف يحتوي على أحرف Unicode غير مرئية

هذا الملف يحتوي على أحرف Unicode غير مرئية لا يمكن التمييز بينها بعين الإنسان ولكن قد تتم معالجتها بشكل مختلف بواسطة الحاسوب. إذا كنت تعتقد أن هذا مقصود، يمكنك تجاهل هذا التحذير بأمان. استخدم زر الهروب للكشف عنها.

هذا الملف يحتوي على أحرف Unicode قد تُخلط مع أحرف أخرى. إذا كنت تعتقد أن هذا مقصود، يمكنك تجاهل هذا التحذير بأمان. استخدم زر الهروب للكشف عنها.

#!/usr/bin/bash
# Weather App Deployment Script
set -e # Exit on error
echo "🌤️ Weather App Deployment"
# Get project name from user
echo "📝 Enter your Ghaymah PROJECT name:"
read project_name
# Validate project name
if [ -z "$project_name" ]; then
echo "❌ Project name cannot be empty!"
exit 1
fi
# Get app name from user
echo "📝 Enter your APP name (this will be the deployed application name):"
read app_name
# Validate app name
if [ -z "$app_name" ]; then
echo "❌ App name cannot be empty!"
exit 1
fi
# Configuration
IMAGENAME="$app_name" # Use app name for image
DOCKER_USERNAME="ahmedgamalyousef" # Your Docker Hub username
echo "🚀 Starting deployment..."
echo " Project: ${project_name}"
echo " App: ${app_name}"
echo " Image: ${IMAGENAME}"
# Build Docker image
echo "🏗️ Building ${IMAGENAME} image..."
# Get current tag and increment
tag=$(docker image ls | grep ${IMAGENAME} | awk '{print $2}' | head -1)
if [ -z "${tag}" ]; then
new_tag=1
echo "📌 No existing image found, starting with version 1"
else
echo "📌 Found existing tag: ${tag}"
docker rmi ${IMAGENAME}:${tag} || echo "⚠️ Could not remove old image, continuing..."
new_tag=$((tag + 1))
fi
# Build the image
echo "🔨 Building version ${new_tag}..."
docker build -t ${IMAGENAME}:${new_tag} .
# Push to Docker Hub
echo "📤 Pushing to Docker Hub..."
docker tag ${IMAGENAME}:${new_tag} ${DOCKER_USERNAME}/${IMAGENAME}:${new_tag}
docker push ${DOCKER_USERNAME}/${IMAGENAME}:${new_tag}
# Also tag as latest
docker tag ${IMAGENAME}:${new_tag} ${DOCKER_USERNAME}/${IMAGENAME}:latest
docker push ${DOCKER_USERNAME}/${IMAGENAME}:latest
echo "✅ Image pushed: ${DOCKER_USERNAME}/${IMAGENAME}:${new_tag}"
# Ghaymah deployment
if command -v gy &> /dev/null; then
echo "☁️ Setting up Ghaymah deployment..."
# Create project with the project name
echo "🔧 Creating project: ${project_name}"
project_id=$(gy resource project create --set .name=${project_name} | awk '/ID:/ {print $NF}')
if [ -z "$project_id" ]; then
echo "❌ Failed to get project ID"
exit 1
fi
echo "✅ Project ID: ${project_id}"
# Create .ghaymah.json configuration using both names
cat > .ghaymah.json <<EOF
{
"container": {
"image": "docker.io/${DOCKER_USERNAME}/${IMAGENAME}:${new_tag}",
"pullSecretName": ""
},
"name": "${app_name}",
"ports": [
{
"expose": true,
"number": 5000
}
],
"projectId": "${project_id}",
"publicAccess": {
"baseDomain": "hosted.ghaymah.systems",
"domain": "auto",
"enabled": true
},
"resourceTier": "t1"
}
EOF
echo "✅ Configuration file created:"
echo " - Project: ${project_name} (ID: ${project_id})"
echo " - App: ${app_name}"
echo " - Image: ${DOCKER_USERNAME}/${IMAGENAME}:${new_tag}"
# Deploy to Ghaymah
echo "🚀 Deploying to Ghaymah..."
gy resource app launch
echo "🎉 Deployment successful!"
echo "📊 Project: ${project_name}"
echo "📱 App: ${app_name}"
echo "🌐 URL: https://${app_name}.hosted.ghaymah.systems"
else
echo " Ghaymah CLI not found, skipping deployment"
echo "💡 You can deploy manually later using the created .ghaymah.json file"
fi
echo "✨ Deployment process completed!"