157 lines
4.0 KiB
Bash
157 lines
4.0 KiB
Bash
#!/bin/bash
|
||
|
||
# QAUP 程序更新打包脚本
|
||
# 用于生成仅包含jar文件的更新包
|
||
|
||
set -e
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
|
||
# 颜色输出
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
print_message() {
|
||
echo -e "${1}${2}${NC}"
|
||
}
|
||
|
||
print_message $BLUE "=== QAUP 程序更新打包 ==="
|
||
|
||
# 1. 构建应用
|
||
print_message $BLUE "构建应用..."
|
||
cd "$PROJECT_ROOT"
|
||
mvn clean package -DskipTests -q
|
||
|
||
# 检查jar文件是否生成成功
|
||
JAR_FILE="$PROJECT_ROOT/qaup-admin/target/qaup-admin.jar"
|
||
if [ ! -f "$JAR_FILE" ]; then
|
||
print_message $RED "❌ jar文件构建失败"
|
||
exit 1
|
||
fi
|
||
|
||
# 2. 创建更新包目录
|
||
UPDATE_DIR="qaup-update-$(date +%Y%m%d-%H%M%S)"
|
||
mkdir -p "$UPDATE_DIR"
|
||
|
||
# 3. 复制jar文件
|
||
print_message $BLUE "准备更新文件..."
|
||
cp "$JAR_FILE" "$UPDATE_DIR/qaup-admin.jar"
|
||
|
||
# 4. 创建更新说明
|
||
cat > "$UPDATE_DIR/UPDATE-INSTRUCTIONS.md" << 'EOF'
|
||
# QAUP 程序更新包
|
||
|
||
## 包含内容
|
||
- `qaup-admin.jar` - 新版本应用程序
|
||
|
||
## ⚠️ 生产环境安全要求
|
||
由于生产环境安全限制,必须手工文件上传,禁止使用自动化脚本传输。
|
||
|
||
## 更新步骤
|
||
|
||
### 1. 文件传输(手工方式)
|
||
将更新包 `qaup-admin.jar` 按安全策略传输到生产服务器:
|
||
```bash
|
||
# 方案A:使用SCP
|
||
scp qaup-admin.jar user@生产服务器IP:/opt/qaup/qaup-deploy/
|
||
|
||
# 方案B:使用SFTP
|
||
# 通过SFTP工具上传文件到 /opt/qaup/qaup-deploy/ 目录
|
||
```
|
||
|
||
### 2. 重命名文件
|
||
```bash
|
||
ssh user@生产服务器IP
|
||
cd /opt/qaup/qaup-deploy
|
||
cp qaup-admin.jar new-app.jar
|
||
```
|
||
|
||
### 3. 执行更新
|
||
```bash
|
||
./deploy-update.sh
|
||
```
|
||
|
||
### 4. 验证更新
|
||
```bash
|
||
# 检查服务状态
|
||
docker compose ps
|
||
|
||
# 检查应用日志
|
||
docker compose logs -f qaup-app
|
||
|
||
# 访问系统确认功能正常
|
||
curl http://localhost:8080/actuator/health
|
||
```
|
||
|
||
## 安全注意事项
|
||
- 更新前建议备份数据库:`docker exec qaup-postgres pg_dump -U qaup qaup > backup-$(date +%Y%m%d).sql`
|
||
- 如果更新失败,脚本会自动回滚
|
||
- 如有更多问题,请查看完整的部署指南:DeployGuide.md
|
||
- 仅授权人员可访问生产服务器
|
||
EOF
|
||
|
||
# 5. 创建版本信息
|
||
cat > "$UPDATE_DIR/VERSION-INFO.txt" << EOF
|
||
QAUP 程序更新包
|
||
构建时间: $(date)
|
||
构建主机: $(hostname)
|
||
Git提交: $(git rev-parse --short HEAD 2>/dev/null || echo "未知")
|
||
Maven版本: $(mvn --version | head -1)
|
||
Java版本: $(java -version 2>&1 | head -1)
|
||
文件大小: $(du -sh "$JAR_FILE" | cut -f1)
|
||
文件MD5: $(md5sum "$JAR_FILE" | cut -d' ' -f1)
|
||
|
||
更新包内容:
|
||
- qaup-admin.jar (主程序)
|
||
- UPDATE-INSTRUCTIONS.md (更新说明)
|
||
- VERSION-INFO.txt (版本信息)
|
||
|
||
适用场景:
|
||
- 生产环境程序热更新
|
||
- 支持自动回滚机制
|
||
- 适合已部署环境的增量更新
|
||
EOF
|
||
|
||
# 6. 验证更新包完整性
|
||
print_message $BLUE "验证更新包完整性..."
|
||
REQUIRED_FILES=("qaup-admin.jar" "UPDATE-INSTRUCTIONS.md" "VERSION-INFO.txt")
|
||
for file in "${REQUIRED_FILES[@]}"; do
|
||
if [ ! -f "$UPDATE_DIR/$file" ]; then
|
||
print_message $RED "❌ 缺失必要文件: $file"
|
||
rm -rf "$UPDATE_DIR"
|
||
exit 1
|
||
fi
|
||
done
|
||
print_message $GREEN "✓ 所有必要文件验证通过"
|
||
|
||
# 7. 创建更新包
|
||
PACKAGE_NAME="${UPDATE_DIR}.tar.gz"
|
||
tar -czf "$PACKAGE_NAME" "$UPDATE_DIR"
|
||
|
||
# 8. 清理临时目录
|
||
rm -rf "$UPDATE_DIR"
|
||
|
||
print_message $GREEN "✅ 程序更新包创建完成: $PACKAGE_NAME"
|
||
print_message $BLUE "包大小: $(du -sh "$PACKAGE_NAME" | cut -f1)"
|
||
|
||
echo ""
|
||
print_message $BLUE "📋 更新说明(生产环境):"
|
||
echo ""
|
||
echo "⚠️ 由于生产环境安全要求,必须手工文件传输"
|
||
echo ""
|
||
echo "1. 按安全策略传输更新包到目标服务器:"
|
||
echo " scp $PACKAGE_NAME user@生产服务器IP:/opt/qaup/"
|
||
echo " 或使用SFTP、文件传输工具等"
|
||
echo ""
|
||
echo "2. 在生产服务器执行更新:"
|
||
echo " ssh user@生产服务器IP"
|
||
echo " cd /opt/qaup/qaup-deploy"
|
||
echo " tar -xzf ../$PACKAGE_NAME"
|
||
echo " cp qaup-admin.jar new-app.jar"
|
||
echo " ./deploy-update.sh"
|
||
echo ""
|
||
echo "3. 详细更新说明请查看:"
|
||
echo " - 更新说明: UPDATE-INSTRUCTIONS.md" |