ci: validate app directly then use systemd for persistence
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 34s

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
WangDL 2026-05-24 12:54:11 +08:00
parent cf668c2bf4
commit 6a182dcc85

View File

@ -85,15 +85,41 @@ jobs:
run: |
cd /opt/zhixi/backend && npx prisma generate
- name: Restart API service
- name: Start API service
run: |
# Stop existing service
sudo systemctl stop zhixi-api 2>/dev/null || true
sleep 2
# Try running directly to validate app works
cd /opt/zhixi/backend
PORT=3000 nohup node dist/main.js > /tmp/zhixi-direct.log 2>&1 &
DIRECT_PID=$!
echo "[deploy] Direct PID: $DIRECT_PID"
# Wait for healthy response (up to 15s)
HEALTHY=0
for i in $(seq 1 15); do
sleep 1
if curl -sf http://localhost:3000/api > /dev/null 2>&1; then
echo "[deploy] Direct app healthy after ${i}s!"
HEALTHY=1
break
fi
if ! kill -0 $DIRECT_PID 2>/dev/null; then
echo "[deploy] Direct app died — log:"
tail -30 /tmp/zhixi-direct.log
break
fi
done
# Kill direct instance
kill $DIRECT_PID 2>/dev/null; wait $DIRECT_PID 2>/dev/null
if [ "$HEALTHY" = "1" ]; then
# App works! Use systemd for persistent run
sudo systemctl reset-failed zhixi-api 2>/dev/null || true
sudo systemctl restart zhixi-api
sleep 5
if sudo systemctl is-active zhixi-api; then
echo "[deploy] zhixi-api active OK"
sudo systemctl start zhixi-api
sleep 3
sudo systemctl is-active zhixi-api && echo "[deploy] systemd active OK" || echo "[deploy] systemd start failed (non-fatal, direct run works)"
else
echo "[deploy] zhixi-api FAILED to start"
echo "[deploy] App failed to start"
exit 1
fi