feat(deploy): Refactor deployment script directory structure and optimize differential package generation process - Move collect-layers.sh script to docker/script/ directory - Update compare-sync.sh script path references and automatic unpacking logic```

Reorganize the directory structures of `collect` and `diff`, and place them uniformly under `docker/script/`
Optimize the logic for generating differential packages, supporting automatic search and extraction of layers-collection.tar.gz.
- Add copying and updating of the client directory.
- Simplify naming of compressed packages by using fixed names: diff-package.tar.gz and layers-collection.tar.gz.
- Update the README.md documentation to provide clearer usage instructions and directory structure explanations
This commit is contained in:
smile 2025-09-25 11:15:52 +08:00
parent 17c5188967
commit b6a468a14c
4 changed files with 291 additions and 303 deletions

3
.gitignore vendored
View file

@ -37,4 +37,5 @@ docker/data
docker/output
script/collect/
script/diff/
/docker/script/diff/
/docker/script/collect/

View file

@ -8,8 +8,8 @@ set -euo pipefail
# 记录开始时间
START_TIME=$(date +%s)
# 计算项目根目录
BASE_DIR="$(cd "$(dirname "$0")"/.. && pwd)"
# 计算项目根目录 (从 docker/script/ 回到项目根目录)
BASE_DIR="$(cd "$(dirname "$0")"/../.. && pwd)"
# 颜色与日志函数
GREEN='\033[0;32m'
@ -27,22 +27,28 @@ print_divider() { echo -e "${YELLOW}----------------------------------------${RE
# 生成时间戳
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
COLLECTION_DIR="layers-collection-$TIMESTAMP"
# 脚本同级目录作为临时工作目录
# docker/script 目录作为临时工作目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
OUTPUT_DIR="$SCRIPT_DIR/$COLLECTION_DIR"
# collect目录用于存放最终压缩包
COLLECT_DIR="$SCRIPT_DIR/collect"
# script/collect目录用于存放最终压缩包与compare-sync.sh脚本同级
COLLECT_DIR="$(cd "$(dirname "$0")"/../script && pwd)/collect"
print_step "开始收集现场 layers.idx 文件"
print_info "项目根目录: $BASE_DIR"
print_info "临时目录: $OUTPUT_DIR"
print_info "压缩包目录: $COLLECT_DIR"
# 清空collect目录
if [[ -d "$COLLECT_DIR" ]]; then
print_info "清空collect目录: $COLLECT_DIR"
rm -rf "$COLLECT_DIR"/*
fi
# 创建输出目录和collect目录
mkdir -p "$OUTPUT_DIR"
mkdir -p "$COLLECT_DIR"
# 扫描路径列表
# 扫描路径列表 (相对于项目根目录)
SCAN_PATHS=(
"docker/output/server"
)
@ -123,16 +129,22 @@ fi
# 创建压缩包
print_step "创建压缩包"
cd "$SCRIPT_DIR"
if tar -czf "$COLLECT_DIR/$COLLECTION_DIR.tar.gz" "$COLLECTION_DIR"; then
print_success "已创建压缩包: $COLLECTION_DIR.tar.gz"
ARCHIVE_NAME="layers-collection.tar.gz"
if tar -czf "$COLLECT_DIR/$ARCHIVE_NAME" "$COLLECTION_DIR"; then
print_success "已创建压缩包: $ARCHIVE_NAME"
else
print_error "创建压缩包失败"
rm -rf "$OUTPUT_DIR"
exit 1
fi
# 创建时间戳信息文件
TIMESTAMP_FILE="生成于$(date +'%Y-%m-%d %H点%M分%S秒')"
touch "$COLLECT_DIR/$TIMESTAMP_FILE"
print_info "已创建时间戳文件: $TIMESTAMP_FILE"
# 显示文件大小
file_size=$(du -h "$COLLECT_DIR/$COLLECTION_DIR.tar.gz" | cut -f1)
file_size=$(du -h "$COLLECT_DIR/$ARCHIVE_NAME" | cut -f1)
print_info "文件大小: $file_size"
# 清理临时目录
@ -145,7 +157,7 @@ END_TIME=$(date +%s)
EXEC_TIME=$((END_TIME - START_TIME))
print_step "收集完成"
print_info "压缩包位置: $COLLECT_DIR/$COLLECTION_DIR.tar.gz"
print_info "压缩包位置: $COLLECT_DIR/$ARCHIVE_NAME"
print_info "收集模块数: $collected_count"
print_info "执行耗时: ${EXEC_TIME}"
print_info "请将此文件发送给开发人员进行差异分析"

View file

@ -1,303 +1,165 @@
# 部署脚本
# 分层部署差异同步工具
这是一套用于 Spring Boot 分层部署的差异同步工具,包含现场数据收集和差异包生成两个核心脚本。
## 概述
该工具集主要用于解决以下场景:
- **现场环境**:运行生产服务,需要收集当前部署状态
- **开发环境**:基于现场收集的数据,生成最小化的差异更新包
- **差异部署**:仅更新变化的依赖和业务代码,减少部署风险和时间
## 工具组成
### 1. collect-layers.sh - 现场收集脚本
用于在现场环境收集各模块的 `layers.idx` 文件,这些文件记录了 Spring Boot 分层打包的依赖信息。
### 2. compare-sync.sh - 差异生成脚本
基于收集的现场数据,在开发环境生成差异应用包,包含需要更新的依赖和业务代码。
# 项目部署工具使用指南
---
## collect-layers.sh 详细说明
## 🚀 快速开始3步搞定
### 功能描述
自动发现并收集所有模块的 `layers.idx` 文件,用于后续的差异分析。
### 使用方法
### 第一步:现场收集信息
在现场服务器上运行收集脚本:
```bash
# 在项目根目录执行
./script/collect-layers.sh
docker/script/collect-layers.sh
```
这会生成一个压缩包:`docker/script/collect/layers-collection.tar.gz`
### 工作流程
1. **自动发现模块**:扫描 `docker/output/server` 路径下的所有模块
2. **收集 layers.idx**:查找每个模块的 `application/BOOT-INF/layers.idx` 文件
3. **创建收集包**:将所有收集的文件打包成 `layers-collection-{timestamp}.tar.gz`
4. **输出结果**:压缩包保存在 `script/collect/` 目录下
### 输出结构
```
script/collect/
└── layers-collection-20250918-093742.tar.gz
└── layers-collection-20250918-093742/
├── module1/
│ └── layers.idx
├── module2/
│ └── layers.idx
└── ...
```
### 执行示例
### 第二步:开发环境生成差异包
把压缩包拿回开发环境,然后运行:
```bash
$ ./script/collect-layers.sh
cd script
./compare-sync.sh
```
这会生成差异包:`docker/script/diff/diff-package.tar.gz`
🚀 开始收集现场 layers.idx 文件
📘 项目根目录: /path/to/sol-cloud
📘 临时目录: /path/to/script/layers-collection-20250918-093742
📘 压缩包目录: /path/to/script/collect
### 第三步:现场应用更新
把差异包带到现场,解压并运行:
```bash
tar -xzf diff-package.tar.gz
cd diff-package
./apply-diff.sh
```
🚀 自动发现模块
📘 扫描: docker/output/server
✅ 发现模块: web-system-8081
✅ 发现模块: web-file-8082
✅ 发现模块: gateway-9527
**就这么简单!🎉**
🚀 收集 layers.idx 文件
✅ 收集: web-system-8081/layers.idx (2.1K)
✅ 收集: web-file-8082/layers.idx (1.8K)
✅ 收集: gateway-9527/layers.idx (1.5K)
---
🚀 创建压缩包
✅ 已创建压缩包: layers-collection-20250918-093742.tar.gz
📘 文件大小: 8.2K
## 📁 工具说明
🚀 收集完成
📘 压缩包位置: script/collect/layers-collection-20250918-093742.tar.gz
📘 收集模块数: 3
📘 执行耗时: 2秒
✅ 现场收集任务完成!
### 🔍 collect-layers.sh收集脚本
**作用**:告诉我现场环境都有什么文件
**什么时候用**:需要更新现场环境之前
**怎么用**
```bash
# 在现场服务器上运行
docker/script/collect-layers.sh
```
**会发生什么**
1. 自动扫描所有服务模块
2. 记录每个模块的文件信息
3. 打包成一个压缩文件
4. 你就得到了"现场环境清单"
**输出结果**
```
docker/script/collect/
├── layers-collection.tar.gz ← 这个文件带回每个模块的文件信息
└── 生成于xxx时间戳文件 ← 记录生成时间
```
### ⚖️ compare-sync.sh对比脚本
**作用**:对比现场和开发环境,找出差异
**什么时候用**:在开发环境,拿到现场收集包之后
**怎么用**
```bash
cd script
./compare-sync.sh
```
**会发生什么**
1. 自动找到现场收集包并解压
2. 对比现场和本地的文件差异
3. 把需要更新的文件打包
4. 生成自动安装脚本
5. 你就得到了"差异更新包"
**输出结果**
```
docker/script/diff/
├── diff-package/ ← 临时文件夹
│ ├── apply-diff.sh ← 自动安装脚本
│ ├── modules/ ← 服务端更新文件
│ └── client/ ← 前端更新文件
└── diff-package.tar.gz ← 这个文件带到现场
```
### 🛠️ apply-diff.sh安装脚本
**作用**:在现场自动安装更新
**什么时候用**:在现场环境,解压差异包之后
**怎么用**
```bash
./apply-diff.sh
```
**会发生什么**
1. 自动找到项目位置
2. 删除不需要的旧文件
3. 复制新文件到正确位置
4. 更新前端文件
5. 完成!服务器就更新好了
---
## 💡 实际使用场景
### 场景1普通更新
```bash
# 现场:收集信息
docker/script/collect-layers.sh
# 开发:生成差异包
cd script && ./compare-sync.sh
# 现场:应用更新
tar -xzf diff-package.tar.gz && cd diff-package && ./apply-diff.sh
```
### 场景2只更新特定模块
```bash
# 只更新web-system-8081模块
./compare-sync.sh --modules web-system-8081
```
### 场景3手动指定收集包位置
```bash
# 如果收集包在其他地方
./compare-sync.sh --layers-collection /path/to/your/collection/
```
---
## compare-sync.sh 详细说明
### 功能描述
基于现场收集的 `layers.idx` 文件生成差异应用包包含需要更新的依赖jar文件和业务代码。
### 使用方法
```bash
# 基本用法
./script/compare-sync.sh --layers-collection <收集目录路径>
# 带可选参数
./script/compare-sync.sh --layers-collection <收集目录路径> \
[--spring-boot-upgraded] \
[--has-snapshot] \
[--modules module1,module2]
```
### 参数说明
| 参数 | 必需 | 说明 |
|------|------|------|
| `--layers-collection` | ✅ | 现场收集的解压目录路径 |
| `--spring-boot-upgraded` | ❌ | Spring Boot 版本已升级标志 |
| `--has-snapshot` | ❌ | 包含 SNAPSHOT 版本依赖标志 |
| `--modules` | ❌ | 指定处理特定模块,用逗号分隔 |
### 工作流程
1. **解析参数**:验证收集目录和可选参数
2. **发现模块**:扫描收集目录中的所有模块
3. **比较差异**:对比现场和本地的 `layers.idx` 文件
4. **生成差异包**
- 复制变更的依赖jar文件
- 包含完整的 application 层(业务代码)
- 生成删除列表(多余的依赖)
5. **创建应用脚本**:生成 `apply-diff.sh` 自动化应用脚本
### 输出结构
```
script/diff/
└── diff-package-20250918-094857.tar.gz
└── diff-package-20250918-094857/
├── apply-diff.sh # 自动应用脚本
└── modules/
├── web-system-8081/
│ ├── application/ # 业务代码层
│ ├── files/ # 新增的jar文件
│ │ ├── spring-boot-starter-web-3.2.1.jar
│ │ └── ...
│ └── delete-list.txt # 需要删除的文件列表
└── web-file-8082/
└── ...
```
### 使用示例
#### 1. 基本使用流程
```bash
# 步骤1: 解压现场收集的文件
tar -xzf script/collect/layers-collection-20250918-093742.tar.gz -C /tmp/
# 步骤2: 生成差异包
./script/compare-sync.sh --layers-collection /tmp/layers-collection-20250918-093742/
# 步骤3: 将生成的差异包发送到现场
# script/diff/diff-package-20250918-094857.tar.gz
```
#### 2. 指定特定模块
```bash
./script/compare-sync.sh \
--layers-collection /tmp/layers-collection-20250918-093742/ \
--modules web-system-8081,gateway-9527
```
#### 3. 包含可选标志
```bash
./script/compare-sync.sh \
--layers-collection /tmp/layers-collection-20250918-093742/ \
--spring-boot-upgraded \
--has-snapshot
```
### 执行示例
```bash
$ ./script/compare-sync.sh --layers-collection /tmp/layers-collection-20250918-093742/
🚀 开始生成差异包
📘 收集目录: /tmp/layers-collection-20250918-093742/
📘 临时目录: /path/to/script/diff-package-20250918-094857
📘 差异包目录: /path/to/script/diff
🚀 发现收集的模块
✅ 发现模块: web-system-8081
✅ 发现模块: web-file-8082
✅ 发现模块: gateway-9527
🚀 开始处理模块差异
🚀 处理模块: web-system-8081
📘 模块 web-system-8081: 发现 layers.idx 差异
📘 差异: +5 -2
[DEP] 完成,复制 5 个 jar
🚀 处理模块: web-file-8082
✅ 模块 web-file-8082: layers.idx 一致,但仍需更新 application 层
🚀 创建压缩包
✅ 已创建差异包: diff-package-20250918-094857.tar.gz
📘 文件大小: 125M
🚀 生成完成
📘 差异包位置: script/diff/diff-package-20250918-094857.tar.gz
📘 处理模块数: 3
📘 包含模块: web-system-8081 web-file-8082 gateway-9527
✅ 请将差异包发送给现场执行
```
---
## 现场应用差异包
### 应用步骤
1. **接收差异包**:从开发环境获取 `diff-package-*.tar.gz`
2. **解压差异包**
```bash
tar -xzf diff-package-20250918-094857.tar.gz
cd diff-package-20250918-094857/
```
3. **执行应用脚本**
```bash
./apply-diff.sh
```
### apply-diff.sh 功能
- **自动定位项目**:向上查找包含 `docker/output` 的项目根目录
- **处理每个模块**
- 删除多余的依赖文件
- 复制新增的jar文件到对应目录
- 更新 application 层(业务代码)
- **智能分类**根据jar文件名自动判断是否为SNAPSHOT版本
---
## 最佳实践
### 1. 版本控制
- 保留收集包和差异包,便于问题追溯
- 建议按时间戳命名,避免文件覆盖
### 2. 安全考虑
- 现场收集前先备份重要数据
- 差异应用前测试 `apply-diff.sh` 脚本权限
### 3. 性能优化
- 对于大型项目,可使用 `--modules` 参数只处理变更的模块
- 网络传输时压缩差异包以减少传输时间
### 4. 故障排除
- 检查项目目录结构是否符合预期
- 确认 `docker/output/server` 目录下有对应的模块
- 验证 `layers.idx` 文件格式正确
---
## 目录结构要求
## 📂 项目目录结构
你的项目应该长这样:
```
sol-cloud/
├── docker/
│ ├── script/
│ │ ├── collect-layers.sh ← 收集脚本
│ │ ├── collect/ ← 收集包存放处
│ │ └── diff/ ← 差异包存放处
│ └── output/
│ ├── server/ # 服务端模块
│ │ ├── web-system-8081/
│ │ │ ├── application/ # 业务代码层
│ │ │ │ └── BOOT-INF/
│ │ │ │ └── layers.idx
│ │ │ ├── dependencies/ # 普通依赖层
│ │ │ │ └── BOOT-INF/lib/
│ │ │ └── snapshot-dependencies/ # SNAPSHOT依赖层
│ │ │ └── BOOT-INF/lib/
│ │ └── ...
│ └── client/ # 客户端模块(可选)
│ ├── server/ ← 后端服务文件
│ └── client/ ← 前端文件
└── script/
├── collect-layers.sh
├── compare-sync.sh
├── collect/ # 收集包输出目录
└── diff/ # 差异包输出目录
└── compare-sync.sh ← 对比脚本
```
---
## 错误处
## 🎯 工作原理
### 常见错误及解决方案
1. **收集阶段**:记录现场每个模块的"文件指纹"
2. **对比阶段**:把现场指纹和开发环境指纹做对比
3. **打包阶段**:把有差异的文件打包,生成安装脚本
4. **应用阶段**:在现场自动替换文件
1. **未发现任何模块**
```
❌ 未发现任何模块的 layers.idx 文件
```
- 检查 `docker/output/server` 目录是否存在
- 确认模块目录结构正确
2. **收集目录不存在**
```
❌ 收集目录不存在: /path/to/collection
```
- 检查路径是否正确
- 确认已正确解压收集包
3. **无法找到项目根目录**
```
❌ 无法找到项目根目录包含docker/output的目录
```
- 确认在正确的项目目录下执行脚本
- 检查项目结构是否完整
---
这样做的好处:
- 🚀 **快**:只传输变化的文件
- 🎯 **准**:自动识别需要更新的内容
- 🛡️ **稳**:最小化更新风险

View file

@ -4,7 +4,8 @@ set -euo pipefail
# 开发环境差异生成脚本
# 基于现场收集的 layers.idx 文件生成差异应用包
# 用法: script/compare-sync.sh --layers-collection <path> [--spring-boot-upgraded] [--has-snapshot] [--modules module1,module2]
# 用法: script/compare-sync.sh [--layers-collection <path>] [--spring-boot-upgraded] [--has-snapshot] [--modules module1,module2]
# 注意:如果不指定--layers-collection参数会自动解压docker/script/collect/layers-collection.tar.gz
# 计算项目根目录(脚本所在目录的上一级)
BASE_DIR="$(cd "$(dirname "$0")"/.. && pwd)"
@ -46,11 +47,66 @@ print_error() { echo -e "${RED}❌ $1${RESET}"; }
print_step() { echo -e "\n${YELLOW}🚀 $1${RESET}"; }
print_divider() { echo -e "${YELLOW}----------------------------------------${RESET}"; }
# 如果未提供layers-collection参数尝试自动解压docker/script/collect/layers-collection.tar.gz
if [[ -z "$LAYERS_COLLECTION_DIR" ]]; then
print_error "Usage: $0 --layers-collection <path> [--spring-boot-upgraded] [--has-snapshot] [--modules module1,module2]"
print_info "Example: tar -xzf script/collect/layers-collection-20241217-143022.tar.gz -C /tmp/"
print_info " $0 --layers-collection /tmp/layers-collection-20241217-143022/"
exit 2
print_info "未指定--layers-collection参数尝试自动解压docker/script/collect/layers-collection.tar.gz"
AUTO_ARCHIVE="$BASE_DIR/docker/script/collect/layers-collection.tar.gz"
print_info "项目根目录: $BASE_DIR"
print_info "查找压缩包: $AUTO_ARCHIVE"
if [[ ! -f "$AUTO_ARCHIVE" ]]; then
print_error "自动解压失败:未找到压缩包 $AUTO_ARCHIVE"
print_info "当前工作目录: $(pwd)"
print_info "脚本位置: $(dirname "$0")"
print_info "请检查以下可能的位置:"
print_info " - $BASE_DIR/docker/script/collect/layers-collection.tar.gz"
print_info " - $(dirname "$0")/../docker/script/collect/layers-collection.tar.gz"
# 尝试其他可能的路径
ALT_ARCHIVE="$(dirname "$0")/../docker/script/collect/layers-collection.tar.gz"
if [[ -f "$ALT_ARCHIVE" ]]; then
print_success "找到备用路径的压缩包: $ALT_ARCHIVE"
AUTO_ARCHIVE="$ALT_ARCHIVE"
else
print_info "请先运行 docker/script/collect-layers.sh 生成压缩包,或手动指定--layers-collection参数"
print_info "Usage: $0 --layers-collection <path> [--spring-boot-upgraded] [--has-snapshot] [--modules module1,module2]"
print_info "Example: tar -xzf docker/script/collect/layers-collection.tar.gz -C /tmp/"
print_info " $0 --layers-collection /tmp/layers-collection-xxx/"
exit 2
fi
fi
# 直接在docker/script/collect目录下解压
COLLECT_DIR="$(dirname "$AUTO_ARCHIVE")"
TARGET_EXTRACT_DIR="$COLLECT_DIR/layers-collection"
# 如果目标目录已存在,先删除
if [[ -d "$TARGET_EXTRACT_DIR" ]]; then
rm -rf "$TARGET_EXTRACT_DIR"
print_info "清理已存在的解压目录: $TARGET_EXTRACT_DIR"
fi
print_info "解压压缩包到: $COLLECT_DIR"
if tar -xzf "$AUTO_ARCHIVE" -C "$COLLECT_DIR"; then
# 查找解压后的目录通常是layers-collection-*格式)
extracted_dir=$(find "$COLLECT_DIR" -maxdepth 1 -type d -name "layers-collection-*" | head -1)
if [[ -n "$extracted_dir" && -d "$extracted_dir" ]]; then
# 重命名为固定名称,去掉时间戳
mv "$extracted_dir" "$TARGET_EXTRACT_DIR"
LAYERS_COLLECTION_DIR="$TARGET_EXTRACT_DIR"
print_success "自动解压成功,使用目录: $LAYERS_COLLECTION_DIR"
# 不设置AUTO_CLEANUP_DIR保留解压文件
else
print_error "解压后未找到预期的layers-collection目录"
print_info "collect目录内容"
ls -la "$COLLECT_DIR"
exit 2
fi
else
print_error "解压失败: $AUTO_ARCHIVE"
exit 2
fi
fi
if [[ ! -d "$LAYERS_COLLECTION_DIR" ]]; then
@ -58,14 +114,14 @@ if [[ ! -d "$LAYERS_COLLECTION_DIR" ]]; then
exit 2
fi
# 生成时间戳和输出目录
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
DIFF_PACKAGE_DIR="diff-package-$TIMESTAMP"
# 脚本同级目录作为临时工作目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
OUTPUT_DIR="$SCRIPT_DIR/$DIFF_PACKAGE_DIR"
# diff目录用于存放最终压缩包
DIFF_DIR="$SCRIPT_DIR/diff"
# 生成输出目录
DIFF_PACKAGE_DIR="diff-package"
# diff目录用于存放最终压缩包与collect同级
DIFF_DIR="$BASE_DIR/docker/script/diff"
# 临时工作目录也放在docker/script/diff下
OUTPUT_DIR="$DIFF_DIR/$DIFF_PACKAGE_DIR"
# 压缩包固定名称
ARCHIVE_NAME="diff-package.tar.gz"
# 参数与生效路径回显
print_step "开始生成差异包"
@ -76,16 +132,23 @@ if [[ "$SPRING_BOOT_UPGRADED" == true || "$HAS_SNAPSHOT" == true ]]; then
print_info "flags: $( [[ "$SPRING_BOOT_UPGRADED" == true ]] && echo -n "spring-boot-upgraded " )$( [[ "$HAS_SNAPSHOT" == true ]] && echo -n "has-snapshot" )"
fi
# 创建差异包目录结构
# 清理并创建差异包目录结构
if [[ -d "$OUTPUT_DIR" ]]; then
rm -rf "$OUTPUT_DIR"
print_info "清理已存在的临时目录: $OUTPUT_DIR"
fi
mkdir -p "$OUTPUT_DIR/modules"
mkdir -p "$OUTPUT_DIR/client"
mkdir -p "$DIFF_DIR"
# 发现收集的模块
print_step "发现收集的模块"
collected_modules=()
for module_dir in "$LAYERS_COLLECTION_DIR"/*/; do
if [[ -d "$module_dir" ]]; then
module_name=$(basename "$module_dir")
if [[ -f "$module_dir/layers.idx" ]]; then
# 检查是否指定了特定模块
if [[ -n "$SPECIFIC_MODULES" ]]; then
@ -378,6 +441,17 @@ EOF
rm -f "$only_in_new" "$only_in_collected"
done
# 复制client目录
print_step "复制client目录"
CLIENT_SOURCE_DIR="$BASE_DIR/docker/output/client"
if [[ -d "$CLIENT_SOURCE_DIR" ]]; then
print_info "复制client目录: $CLIENT_SOURCE_DIR -> $OUTPUT_DIR/client/"
rsync -a --delete "$CLIENT_SOURCE_DIR/" "$OUTPUT_DIR/client/"
print_success "client目录复制完成"
else
print_info "未找到client目录: $CLIENT_SOURCE_DIR"
fi
# 完成apply脚本
cat >> "$apply_script" <<EOF
@ -385,6 +459,42 @@ print_step "=== 所有模块处理完成 ==="
print_success "共处理 $processed_modules 个模块"
print_info "如需验证结果请检查各模块的jar文件是否正确更新"
# === 处理client目录 ===
print_step "处理client目录"
if [[ -d "\$SCRIPT_DIR/client" ]]; then
print_info "发现client目录开始更新..."
# 查找项目根目录中的client目录
CLIENT_TARGET_DIR=""
if [[ -d "\$PROJECT_ROOT/docker/output/client" ]]; then
CLIENT_TARGET_DIR="\$PROJECT_ROOT/docker/output/client"
elif [[ -d "\$PROJECT_ROOT/client" ]]; then
CLIENT_TARGET_DIR="\$PROJECT_ROOT/client"
fi
if [[ -n "\$CLIENT_TARGET_DIR" ]]; then
print_info "目标client目录: \$CLIENT_TARGET_DIR"
# 删除现有client目录
if [[ -d "\$CLIENT_TARGET_DIR" ]]; then
print_info "删除现有client目录: \$CLIENT_TARGET_DIR"
rm -rf "\$CLIENT_TARGET_DIR"
fi
# 复制新的client目录
print_info "复制新的client目录..."
mkdir -p "\$(dirname "\$CLIENT_TARGET_DIR")"
cp -r "\$SCRIPT_DIR/client" "\$CLIENT_TARGET_DIR"
print_success "client目录更新完成"
else
print_error "未找到目标client目录位置"
print_info "请手动将 \$SCRIPT_DIR/client 复制到正确位置"
fi
else
print_info "差异包中未包含client目录跳过处理"
fi
EOF
print_success "差异包生成完成"
@ -392,22 +502,25 @@ print_success "差异包生成完成"
# 创建压缩包
print_step "创建压缩包"
cd "$SCRIPT_DIR"
tar -czf "$DIFF_DIR/$DIFF_PACKAGE_DIR.tar.gz" "$DIFF_PACKAGE_DIR"
print_success "已创建差异包: $DIFF_PACKAGE_DIR.tar.gz"
cd "$DIFF_DIR"
tar -czf "$ARCHIVE_NAME" "$DIFF_PACKAGE_DIR"
print_success "已创建差异包: $ARCHIVE_NAME"
# 显示文件大小
file_size=$(du -h "$DIFF_DIR/$DIFF_PACKAGE_DIR.tar.gz" | cut -f1)
file_size=$(du -h "$DIFF_DIR/$ARCHIVE_NAME" | cut -f1)
print_info "文件大小: $file_size"
# 清理临时目录
rm -rf "$OUTPUT_DIR"
print_info "已清理临时目录"
# 保留解压目录供后续使用
print_info "解压目录已保留: $LAYERS_COLLECTION_DIR"
# 显示结果
print_divider
print_step "生成完成"
print_info "差异包位置: $DIFF_DIR/$DIFF_PACKAGE_DIR.tar.gz"
print_info "差异包位置: $DIFF_DIR/$ARCHIVE_NAME"
print_info "处理模块数: $processed_modules"
print_info "包含模块: ${collected_modules[*]}"