优化部署脚本跳过无关构建迁移
This commit is contained in:
+69
-6
@@ -40,11 +40,57 @@ fi
|
|||||||
PHP_VERSION=$("$PHP_BIN" -r 'echo PHP_VERSION;' 2>/dev/null)
|
PHP_VERSION=$("$PHP_BIN" -r 'echo PHP_VERSION;' 2>/dev/null)
|
||||||
echo -e "${BLUE}使用 PHP:$PHP_BIN (版本:${PHP_VERSION:-unknown})${NC}"
|
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 文件,避免服务器环境差异导致冲突)
|
# 1. Git Pull(先重置 lock 文件,避免服务器环境差异导致冲突)
|
||||||
echo -e "${YELLOW}[1/8] 拉取代码...${NC}"
|
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 checkout -- composer.lock package-lock.json 2>/dev/null || true
|
||||||
git fetch origin && git pull origin master
|
git fetch origin && git pull origin master
|
||||||
if [ $? -ne 0 ]; then echo -e "${RED}❌ Git 失败${NC}"; exit 1; fi
|
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 (关键检查点)
|
# 2. Composer Install (关键检查点)
|
||||||
echo -e "${YELLOW}[2/8] 安装依赖 (Composer)...${NC}"
|
echo -e "${YELLOW}[2/8] 安装依赖 (Composer)...${NC}"
|
||||||
@@ -92,15 +138,32 @@ if [ $? -ne 0 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 3. 前端构建
|
# 3. 前端构建
|
||||||
echo -e "${YELLOW}[3/8] 前端构建 (npm run build)...${NC}"
|
if [ "$FRONTEND_BUILD_NEEDED" -eq 1 ]; then
|
||||||
npm run build
|
echo -e "${YELLOW}[3/8] 检测到前端构建输入变更,开始前端构建 (npm run build)...${NC}"
|
||||||
if [ $? -ne 0 ]; then echo -e "${RED}❌ npm run build 失败${NC}"; exit 1; fi
|
if [ -n "$FRONTEND_CHANGED_FILES" ]; then
|
||||||
echo -e "${GREEN}✅ 前端资源构建完成。${NC}"
|
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. 数据库迁移
|
# 4. 数据库迁移
|
||||||
echo -e "${YELLOW}[4/8] 数据库迁移...${NC}"
|
if [ "$MIGRATION_NEEDED" -eq 1 ]; then
|
||||||
"$PHP_BIN" artisan migrate --force
|
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. 优化
|
# 5. 优化
|
||||||
echo -e "${YELLOW}[5/8] 生产环境优化...${NC}"
|
echo -e "${YELLOW}[5/8] 生产环境优化...${NC}"
|
||||||
|
|||||||
Reference in New Issue
Block a user