Skip to content

Commit 29fa797

Browse files
committed
Update backend-cd workflow
1 parent 20ad21a commit 29fa797

File tree

1 file changed

+54
-44
lines changed

1 file changed

+54
-44
lines changed

.github/workflows/backend-cd.yml

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,8 @@ jobs:
162162
username: ${{ secrets.OVH_USER }}
163163
key: ${{ secrets.PROD_SSH_KEY }}
164164
script: |
165-
set -e # Stop on error
165+
set -e
166166
167-
# Navigate to project directory
168167
cd ~/microservices || { mkdir -p ~/microservices && cd ~/microservices; }
169168
170169
# Sync repository
@@ -180,67 +179,79 @@ jobs:
180179
git checkout main
181180
fi
182181
183-
# Create required directories
182+
# Create directories
184183
echo "📁 Creating required directories..."
185184
mkdir -p logs/{discoveryserver,gateway,authorizationserver,userservice,ecreditservice,ebankingservice,notificationservice,frontend}
186185
mkdir -p keys
187186
188-
# Check .env.prod exists
187+
# Check .env.prod
189188
if [ ! -f .env.prod ]; then
190189
echo "⚠️ .env.prod not found, using .env.docker as template..."
191190
cp .env.docker .env.prod || { echo "❌ No .env.docker found!"; exit 1; }
192191
fi
193192
194-
# Load environment variables
193+
# Load environment
195194
export $(cat .env.prod | grep -v '^#' | xargs)
196195
197-
# COMPLETE CLEANUP - This fixes the network issue
196+
# Complete cleanup
198197
echo "🛑 Complete Docker cleanup..."
199198
sudo docker compose --env-file .env.prod down --volumes --remove-orphans || true
200-
201-
echo "🧹 Removing all project containers..."
202199
sudo docker ps -aq | xargs -r sudo docker rm -f 2>/dev/null || true
200+
sudo docker network prune -f
203201
204-
echo "🔧 Removing and recreating network..."
205-
sudo docker network rm microservices_spring 2>/dev/null || true
206-
sudo docker network rm microservices_default 2>/dev/null || true
207-
208-
# Pull latest images
202+
# Pull images
209203
echo "📥 Pulling all latest images..."
210204
sudo docker compose --env-file .env.prod pull
211205
212206
# Clean old images
213-
echo "🧹 Cleaning up old images..."
214207
sudo docker image prune -f
215208
216-
# Start PostgreSQL and Kafka
217-
echo "🏗️ Starting infrastructure services..."
218-
sudo docker compose --env-file .env.prod up -d postgresdb zookeeper kafka
209+
# Start PostgreSQL with better error handling
210+
echo "🏗️ Starting PostgreSQL..."
211+
sudo docker compose --env-file .env.prod up -d postgresdb
212+
213+
# Give PostgreSQL more time to initialize
214+
echo "⏳ Waiting for PostgreSQL to initialize (10 seconds)..."
215+
sleep 10
216+
217+
# Check if PostgreSQL container is running
218+
if ! sudo docker ps | grep -q postgrecontainer; then
219+
echo "❌ PostgreSQL container failed to start. Checking logs..."
220+
sudo docker logs postgrecontainer --tail=20
221+
echo "Attempting to restart PostgreSQL..."
222+
sudo docker compose --env-file .env.prod restart postgresdb
223+
sleep 10
224+
fi
219225
220-
# Wait for PostgreSQL
221-
echo "⏳ Waiting for PostgreSQL..."
226+
# Wait for PostgreSQL with better error handling
227+
echo "⏳ Waiting for PostgreSQL to be ready..."
222228
count=0
223-
until sudo docker exec postgrecontainer pg_isready -U ${POSTGRES_USER:-user2711} || [ $count -eq 30 ]; do
224-
echo "Waiting for PostgreSQL... ($count/30)"
225-
sleep 2
229+
until sudo docker exec postgrecontainer pg_isready -U ${POSTGRES_USER:-user2711} 2>/dev/null; do
230+
if [ $count -eq 40 ]; then
231+
echo "❌ PostgreSQL failed to become ready!"
232+
echo "Container status:"
233+
sudo docker ps -a | grep postgres
234+
echo "Last logs:"
235+
sudo docker logs postgrecontainer --tail=30
236+
exit 1
237+
fi
238+
echo "Waiting for PostgreSQL... ($count/40)"
239+
sleep 3
226240
count=$((count + 1))
227241
done
228-
229-
if [ $count -eq 30 ]; then
230-
echo "❌ PostgreSQL failed to start!"
231-
exit 1
232-
fi
233242
echo "✅ PostgreSQL is ready"
234243
244+
# Start Kafka and Zookeeper
245+
echo "🏗️ Starting Kafka and Zookeeper..."
246+
sudo docker compose --env-file .env.prod up -d zookeeper kafka
247+
sleep 10
248+
235249
# Run migrations
236250
echo "🗄️ Running database migrations..."
237251
MIGRATION_COUNT=$(ls micro-digiservices/database-migrations/src/main/resources/db/migration/*.sql 2>/dev/null | wc -l)
238-
echo "📋 Found $MIGRATION_COUNT migration files"
239-
240-
# Get the actual network name created by docker-compose
241-
NETWORK_NAME=$(sudo docker network ls --filter name=microservices --format "{{.Name}}" | head -1)
242252
243253
if [ "$MIGRATION_COUNT" -gt 0 ]; then
254+
NETWORK_NAME=$(sudo docker network ls --filter name=microservices --format "{{.Name}}" | head -1)
244255
sudo docker run --rm \
245256
--network ${NETWORK_NAME:-bridge} \
246257
-v "$(pwd)/micro-digiservices/database-migrations/src/main/resources/db/migration:/flyway/sql:ro" \
@@ -249,29 +260,25 @@ jobs:
249260
-e FLYWAY_PASSWORD="${POSTGRES_PASSWORD:-admin2711}" \
250261
-e FLYWAY_BASELINE_ON_MIGRATE="true" \
251262
-e FLYWAY_OUT_OF_ORDER="true" \
252-
-e FLYWAY_VALIDATE_ON_MIGRATE="false" \
253-
flyway/flyway:11.3.0 migrate || echo "⚠️ Some migrations may have issues"
263+
flyway/flyway:11.3.0 migrate || echo "⚠️ Migration warnings"
254264
fi
255265
256-
# Start Discovery Server
266+
# Start services in order
257267
echo "🔍 Starting Discovery Server..."
258268
sudo docker compose --env-file .env.prod up -d discoveryserver
259269
sleep 30
260270
261-
# Start Gateway and Authorization Server
262271
echo "🔐 Starting Gateway and Authorization Server..."
263272
sudo docker compose --env-file .env.prod up -d gateway authorizationserver
264273
sleep 20
265274
266-
# Start all remaining services
267-
echo "🚀 Starting all microservices..."
275+
echo "🚀 Starting all remaining services..."
268276
sudo docker compose --env-file .env.prod up -d
269277
270-
# Wait for services to start
271-
echo "⏳ Waiting for all services to start..."
278+
echo "⏳ Waiting for services to stabilize..."
272279
sleep 60
273280
274-
# Check services health
281+
# Check services
275282
echo "🏥 Checking services health..."
276283
services=("postgrecontainer" "kafka" "discoveryserver" "gateway" "authorizationserver" "userservice" "ecreditservice" "ebankingservice" "notificationservice")
277284
all_healthy=true
@@ -286,8 +293,13 @@ jobs:
286293
done
287294
288295
if [ "$all_healthy" = false ]; then
289-
echo "⚠️ Some services failed. Recent logs:"
290-
sudo docker compose --env-file .env.prod logs --tail=50
296+
echo "⚠️ Some services failed. Checking logs..."
297+
for service in "${services[@]}"; do
298+
if ! sudo docker ps | grep -q "$service"; then
299+
echo "Logs for $service:"
300+
sudo docker logs "$service" --tail=10 2>&1 || echo "No logs available"
301+
fi
302+
done
291303
exit 1
292304
fi
293305
@@ -296,8 +308,6 @@ jobs:
296308
echo "================================================"
297309
echo "Services available at:"
298310
echo " • Frontend: https://digi-creditrural-io.com"
299-
echo " • Gateway: http://${{ secrets.OVH_HOST }}:8000"
300-
echo " • Auth Server: http://${{ secrets.OVH_HOST }}:8080"
301311
echo "================================================"
302312
303313
- name: Final success notification

0 commit comments

Comments
 (0)