Kaynağa Gözat

feat: add --no-rollback flag to deploy script

When --no-rollback is set, the script keeps the new version on the
server even if health check fails, making it possible to inspect
startup logs via journalctl to diagnose the issue.
master
humanleft 4 gün önce
ebeveyn
işleme
58c2cae5cb
1 değiştirilmiş dosya ile 19 ekleme ve 6 silme
  1. 19
    6
      deploy/deploy.sh

+ 19
- 6
deploy/deploy.sh Dosyayı Görüntüle

@@ -19,6 +19,7 @@ REMOTE_DIR="${REMOTE_DIR:-/opt/iot-platform}"
19 19
 APP_NAME="iot-platform"
20 20
 LOCAL_JAR=""
21 21
 DO_BUILD=false
22
+NO_ROLLBACK=false
22 23
 
23 24
 # 颜色
24 25
 RED='\033[0;31m'
@@ -33,14 +34,19 @@ while [[ $# -gt 0 ]]; do
33 34
             DO_BUILD=true
34 35
             shift
35 36
             ;;
37
+        --no-rollback)
38
+            NO_ROLLBACK=true
39
+            shift
40
+            ;;
36 41
         --jar)
37 42
             LOCAL_JAR="$2"
38 43
             shift 2
39 44
             ;;
40 45
         --help|-h)
41
-            echo "用法: ./deploy.sh [--build] [--jar <path>]"
42
-            echo "  --build     本地执行 mvn clean package"
43
-            echo "  --jar       指定要部署的 jar 文件路径"
46
+            echo "用法: ./deploy.sh [--build] [--no-rollback] [--jar <path>]"
47
+            echo "  --build        本地执行 mvn clean package"
48
+            echo "  --no-rollback  健康检查失败时不自动回滚,保留新版本用于排查"
49
+            echo "  --jar          指定要部署的 jar 文件路径"
44 50
             exit 0
45 51
             ;;
46 52
         *)
@@ -142,10 +148,17 @@ if ssh "${SERVER_USER}@${SERVER_HOST}" "bash ${REMOTE_DIR}/bin/health-check.sh l
142 148
     ssh "${SERVER_USER}@${SERVER_HOST}" "systemctl status ${APP_NAME} --no-pager"
143 149
     exit 0
144 150
 else
145
-    echo -e "${RED}[6/6] 健康检查失败! 执行回滚...${NC}"
151
+    echo -e "${RED}[6/6] 健康检查失败!${NC}"
152
+
153
+    if [ "$NO_ROLLBACK" = true ]; then
154
+        echo -e "${YELLOW}[no-rollback] 已启用不回滚模式,保留新版本用于排查${NC}"
155
+        echo -e "${YELLOW}排查命令:${NC}"
156
+        echo "  ssh ${SERVER_USER}@${SERVER_HOST} 'journalctl -u ${APP_NAME} -f'"
157
+        echo "  ssh ${SERVER_USER}@${SERVER_HOST} 'systemctl status ${APP_NAME}'"
158
+        exit 1
159
+    fi
146 160
 
147
-    # 回滚
148
-    echo -e "${YELLOW}[rollback] 停止服务...${NC}"
161
+    echo -e "${YELLOW}[rollback] 执行回滚...${NC}"
149 162
     ssh "${SERVER_USER}@${SERVER_HOST}" "systemctl stop ${APP_NAME} || true"
150 163
 
151 164
     if ssh "${SERVER_USER}@${SERVER_HOST}" "test -f ${REMOTE_DIR}/backup/${BACKUP_NAME}"; then

Loading…
İptal
Kaydet