diff --git a/Jenkinsfile b/Jenkinsfile index d01c4cc..71da272 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -104,17 +104,53 @@ pipeline { sh ''' set -e - docker rm -f cafeteria-backend cafeteria-frontend 2>/dev/null || true + : "${BACKEND_PORT:?Missing BACKEND_PORT}" + : "${BACKEND_HEALTH_URL:?Missing BACKEND_HEALTH_URL}" + : "${FRONTEND_PORT:?Missing FRONTEND_PORT}" + : "${FRONTEND_HEALTH_URL:?Missing FRONTEND_HEALTH_URL}" + + + # Backend + docker tag cafeteria-backend:latest cafeteria-backend:previous || true + docker rm -f cafeteria-backend 2>/dev/null || true docker run -d \ --name cafeteria-backend \ - -p 8000:8000 \ + -p "$BACKEND_PORT":"$BACKEND_PORT" \ cafeteria-backend:latest + sleep 5 + + if ! curl -fs "$BACKEND_HEALTH_URL"; then + echo "Backend failed, rollback" + docker rm -f cafeteria-backend + docker run -d \ + --name cafeteria-backend \ + -p "$BACKEND_PORT":"$BACKEND_PORT" \ + cafeteria-backend:previous + exit 1 + fi + + # Frontend + docker tag cafeteria-frontend:latest cafeteria-frontend:previous || true + docker rm -f cafeteria-frontend 2>/dev/null || true + docker run -d \ --name cafeteria-frontend \ - -p 3000:80 \ + -p "$FRONTEND_PORT":80 \ cafeteria-frontend:latest + + sleep 3 + + if ! curl -fs "$FRONTEND_HEALTH_URL"; then + echo "Frontend failed, rollback" + docker rm -f cafeteria-frontend + docker run -d \ + --name cafeteria-frontend \ + -p "$FRONTEND_PORT":80 \ + cafeteria-frontend:previous + exit 1 + fi ''' } }