QDAirPortBackend0122/deploy/package-update.sh
2026-01-22 13:19:47 +08:00

157 lines
4.0 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"