优化部署脚本跳过无关构建迁移

This commit is contained in:
pllx
2026-05-04 18:23:54 +08:00
parent 6225a0fb45
commit 9b993e487c
+69 -6
View File
@@ -40,11 +40,57 @@ fi
PHP_VERSION=$("$PHP_BIN" -r 'echo PHP_VERSION;' 2>/dev/null)
echo -e "${BLUE}使用 PHP$PHP_BIN (版本:${PHP_VERSION:-unknown})${NC}"
frontend_build_required() {
local file="$1"
case "$file" in
resources/js/*|resources/css/*|resources/views/*.blade.php|resources/views/*/*.blade.php|resources/views/*/*/*.blade.php|resources/views/*/*/*/*.blade.php)
return 0
;;
package.json|package-lock.json|vite.config.*|tailwind.config.*|postcss.config.*)
return 0
;;
esac
return 1
}
# 1. Git Pull(先重置 lock 文件,避免服务器环境差异导致冲突)
echo -e "${YELLOW}[1/8] 拉取代码...${NC}"
BEFORE_REV=$(git rev-parse HEAD 2>/dev/null || echo "")
git checkout -- composer.lock package-lock.json 2>/dev/null || true
git fetch origin && git pull origin master
if [ $? -ne 0 ]; then echo -e "${RED}❌ Git 失败${NC}"; exit 1; fi
AFTER_REV=$(git rev-parse HEAD 2>/dev/null || echo "")
FRONTEND_BUILD_NEEDED=0
FRONTEND_CHANGED_FILES=""
MIGRATION_NEEDED=0
NEW_MIGRATION_FILES=""
if [ -z "$BEFORE_REV" ] || [ -z "$AFTER_REV" ]; then
FRONTEND_BUILD_NEEDED=1
FRONTEND_CHANGED_FILES="无法识别更新前后版本,保险起见执行构建"
MIGRATION_NEEDED=1
NEW_MIGRATION_FILES="无法识别更新前后版本,保险起见执行迁移检查"
elif [ "$BEFORE_REV" != "$AFTER_REV" ]; then
while IFS= read -r changed_file; do
if frontend_build_required "$changed_file"; then
FRONTEND_BUILD_NEEDED=1
FRONTEND_CHANGED_FILES="${FRONTEND_CHANGED_FILES}${changed_file}"$'\n'
fi
done < <(git diff --name-only "$BEFORE_REV" "$AFTER_REV")
while IFS=$'\t' read -r change_status changed_file extra_path; do
if [ "$change_status" = "A" ]; then
case "$changed_file" in
database/migrations/*.php)
MIGRATION_NEEDED=1
NEW_MIGRATION_FILES="${NEW_MIGRATION_FILES}${changed_file}"$'\n'
;;
esac
fi
done < <(git diff --name-status "$BEFORE_REV" "$AFTER_REV")
fi
# 2. Composer Install (关键检查点)
echo -e "${YELLOW}[2/8] 安装依赖 (Composer)...${NC}"
@@ -92,15 +138,32 @@ if [ $? -ne 0 ]; then
fi
# 3. 前端构建
echo -e "${YELLOW}[3/8] 前端构建 (npm run build)...${NC}"
npm run build
if [ $? -ne 0 ]; then echo -e "${RED}❌ npm run build 失败${NC}"; exit 1; fi
echo -e "${GREEN}✅ 前端资源构建完成。${NC}"
if [ "$FRONTEND_BUILD_NEEDED" -eq 1 ]; then
echo -e "${YELLOW}[3/8] 检测到前端构建输入变更,开始前端构建 (npm run build)...${NC}"
if [ -n "$FRONTEND_CHANGED_FILES" ]; then
echo -e "${BLUE}触发构建的文件:${NC}"
printf '%s\n' "$FRONTEND_CHANGED_FILES"
fi
npm run build
if [ $? -ne 0 ]; then echo -e "${RED}❌ npm run build 失败${NC}"; exit 1; fi
echo -e "${GREEN}✅ 前端资源构建完成。${NC}"
else
echo -e "${GREEN}[3/8] 未检测到前端构建输入变更,跳过 npm run build。${NC}"
fi
# 4. 数据库迁移
echo -e "${YELLOW}[4/8] 数据库迁移...${NC}"
"$PHP_BIN" artisan migrate --force
if [ "$MIGRATION_NEEDED" -eq 1 ]; then
echo -e "${YELLOW}[4/8] 检测到新增迁移文件,执行数据库迁移...${NC}"
if [ -n "$NEW_MIGRATION_FILES" ]; then
echo -e "${BLUE}新增迁移文件:${NC}"
printf '%s\n' "$NEW_MIGRATION_FILES"
fi
"$PHP_BIN" artisan migrate --force
if [ $? -ne 0 ]; then echo -e "${RED}❌ 数据库迁移失败${NC}"; exit 1; fi
else
echo -e "${GREEN}[4/8] 未检测到新增迁移文件,跳过数据库迁移。${NC}"
fi
# 5. 优化
echo -e "${YELLOW}[5/8] 生产环境优化...${NC}"