#!/bin/bash set -euo pipefail # ================= 基础配置 ================= # 1. 修改为你的项目实际路径 PROJECT_DIR="/var/www/UI/RustUI" # 2. 修改为你的日志页面存放路径(刚才创建的目录) LOG_DIR="/var/www/UI/deploy_logs" LOG_PAGE="${LOG_DIR}/index.html" # 3. Nginx 静态文件目录 NGINX_ROOT="/var/www/UI/RustUI/dist-docs" # 日志输出函数 log_info() { echo "[INFO] $1" } # =============== 初始化与代码更新 =============== # 创建日志目录并进入项目目录 mkdir -p "${LOG_DIR}" cd "${PROJECT_DIR}" || exit 1 # 获取更新前的版本号 PREV_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "empty") log_info "部署前版本: ${PREV_COMMIT:0:8}" # 拉取最新代码 log_info "正在拉取最新代码..." git fetch --all git reset --hard origin/main # 如果是 master 分支请改为 master git clean -fd # 获取更新后的版本号 NEW_COMMIT=$(git rev-parse HEAD) DEPLOY_TIME=$(date '+%Y-%m-%d %H:%M:%S') log_info "部署后版本: ${NEW_COMMIT:0:8}" # =============== 安装依赖与构建 =============== log_info "安装依赖..." # 检查并修复损坏的 lockfile if [ -f "pnpm-lock.yaml" ]; then if ! pnpm install --dry-run --frozen-lockfile 2>/dev/null; then log_info "检测到 lockfile 损坏,正在重新生成..." rm -f pnpm-lock.yaml rm -rf node_modules fi fi pnpm install log_info "构建文档..." npm run docs:build log_info "部署静态文件到 Nginx 目录..." rm -rf "${NGINX_ROOT:?}"/* # =============== 生成部署历史记录 =============== if [ "${PREV_COMMIT}" != "${NEW_COMMIT}" ]; then log_info "生成部署历史记录..." # 确保日志目录存在 mkdir -p "${LOG_DIR}" # 如果是首次部署,创建 HTML 骨架 if [ ! -f "${LOG_PAGE}" ]; then cat > "${LOG_PAGE}" < 代码部署更新记录

项目部署与提交历史

HTML fi # 生成本次提交的详细信息区块 TEMP_CONTENT=$(git log --pretty=format:" \
\
%h
\
提交时间:%ad
\
提交人:%an
\
提交说明:%s
\
变更文件:$(git diff --name-only ${PREV_COMMIT} ${NEW_COMMIT} | tr '\n' ' ')
\
" \ --date=format:"%Y-%m-%d %H:%M:%S" \ "${PREV_COMMIT}..${NEW_COMMIT}") # 将新内容追加到页面中(在
之前插入) sed -i -e '/<\/div><\/body><\/html>/d' "${LOG_PAGE}" echo "${TEMP_CONTENT}" >> "${LOG_PAGE}" echo "
" >> "${LOG_PAGE}" fi log_info "部署完成!" echo "更新记录页面已生成,请访问: http://110.42.255.239/ui"