clouddreamai-cicd-setup 1.5.29 → 1.5.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clouddreamai-cicd-setup",
3
- "version": "1.5.29",
3
+ "version": "1.5.31",
4
4
  "description": "CloudDreamAI GitLab CI/CD 自动配置工具 - 支持 NestJS/Vue/React 项目的一键 CI/CD 配置",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -25,6 +25,35 @@ fi
25
25
 
26
26
  echo "开始部署 $APP_NAME 到 $ENV_TYPE 环境 (端口: $APP_PORT)..."
27
27
 
28
+ # 检查端口是否被占用(排除当前应用的容器)
29
+ check_port() {
30
+ local PORT=$1
31
+ # 获取占用端口的进程,排除当前应用的 docker-proxy
32
+ local OCCUPIED=$(lsof -i :$PORT -t 2>/dev/null | while read PID; do
33
+ PROC_NAME=$(ps -p $PID -o comm= 2>/dev/null)
34
+ PROC_CMD=$(ps -p $PID -o args= 2>/dev/null)
35
+ # 如果是 docker-proxy 且属于当前应用,跳过
36
+ if [[ "$PROC_NAME" == "docker-proxy" ]] && docker ps --format '{{.Names}}' | grep -q "^${APP_NAME}"; then
37
+ continue
38
+ fi
39
+ echo "$PID"
40
+ done)
41
+
42
+ if [ -n "$OCCUPIED" ]; then
43
+ echo "❌ 端口 $PORT 已被占用:"
44
+ lsof -i :$PORT 2>/dev/null | head -5
45
+ echo ""
46
+ echo "请检查端口配置或停止占用端口的进程"
47
+ exit 1
48
+ fi
49
+ echo "✓ 端口 $PORT 可用"
50
+ }
51
+
52
+ # 检查端口(仅在非更新部署时检查)
53
+ if ! docker ps --format '{{.Names}}' | grep -q "^${APP_NAME}"; then
54
+ check_port $APP_PORT
55
+ fi
56
+
28
57
  # Nginx 反向代理配置函数
29
58
  configure_nginx_proxy() {
30
59
  local DOMAIN=$1
@@ -299,6 +328,26 @@ EOF
299
328
  DB_ENABLED="{{DB_ENABLED}}" # 是否启用数据库自动创建: true/false
300
329
  DB_TYPE="{{DB_TYPE}}" # 数据库类型: pgsql/mysql
301
330
 
331
+ # 自动检测数据库客户端路径
332
+ find_db_client() {
333
+ local CLIENT=$1
334
+ # 常见路径:宝塔、系统默认、Docker 等
335
+ local PATHS=(
336
+ "/www/server/pgsql/bin/$CLIENT"
337
+ "/www/server/mysql/bin/$CLIENT"
338
+ "/usr/bin/$CLIENT"
339
+ "/usr/local/bin/$CLIENT"
340
+ )
341
+ for P in "${PATHS[@]}"; do
342
+ if [ -x "$P" ]; then
343
+ echo "$P"
344
+ return
345
+ fi
346
+ done
347
+ # 最后尝试 PATH 中查找
348
+ command -v "$CLIENT" 2>/dev/null
349
+ }
350
+
302
351
  # 创建数据库函数
303
352
  create_database() {
304
353
  local DB_HOST=$1
@@ -314,23 +363,31 @@ create_database() {
314
363
  echo "检查并创建数据库: $DB_NAME"
315
364
 
316
365
  if [ "$DB_TYPE" = "pgsql" ]; then
317
- # PostgreSQL
366
+ local PSQL_CMD=$(find_db_client "psql")
367
+ if [ -z "$PSQL_CMD" ]; then
368
+ echo "❌ 未找到 psql 客户端,跳过数据库创建"
369
+ return
370
+ fi
318
371
  export PGPASSWORD="$DB_PASS"
319
- if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -lqt | cut -d \| -f 1 | grep -qw "$DB_NAME"; then
372
+ if $PSQL_CMD -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -lqt | cut -d \| -f 1 | grep -qw "$DB_NAME"; then
320
373
  echo "✓ 数据库 $DB_NAME 已存在"
321
374
  else
322
375
  echo "创建数据库 $DB_NAME..."
323
- psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -c "CREATE DATABASE \"$DB_NAME\";"
376
+ $PSQL_CMD -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -c "CREATE DATABASE \"$DB_NAME\";"
324
377
  echo "✓ 数据库 $DB_NAME 创建成功"
325
378
  fi
326
379
  unset PGPASSWORD
327
380
  elif [ "$DB_TYPE" = "mysql" ]; then
328
- # MySQL
329
- if mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'" | grep -q "$DB_NAME"; then
381
+ local MYSQL_CMD=$(find_db_client "mysql")
382
+ if [ -z "$MYSQL_CMD" ]; then
383
+ echo "❌ 未找到 mysql 客户端,跳过数据库创建"
384
+ return
385
+ fi
386
+ if $MYSQL_CMD -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'" | grep -q "$DB_NAME"; then
330
387
  echo "✓ 数据库 $DB_NAME 已存在"
331
388
  else
332
389
  echo "创建数据库 $DB_NAME..."
333
- mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
390
+ $MYSQL_CMD -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
334
391
  echo "✓ 数据库 $DB_NAME 创建成功"
335
392
  fi
336
393
  fi