Files
happy-life-star/backend/Jenkins部署说明.md
T
peanut b150cede84 feat: 添加完整的容器化部署脚本系统
 新增功能:
- 全量部署脚本 (backend/deploy-all.sh) - 支持一键部署所有微服务
- 单服务部署脚本 - 每个微服务独立部署脚本
- 前端部署脚本 (web-flowith/deploy.sh) - Vue应用自动构建部署
- Jenkins CI/CD 支持 - 完整的Pipeline配置

�� 部署特性:
- 容错机制: 单个服务失败不影响其他服务部署
- 详细报告: 完整的部署状态统计和错误日志
- 容器化: 使用Docker进行服务部署
- 健康检查: 自动验证服务启动状态
- 版本备份: 自动备份旧版本支持快速回滚

🛠️ 技术改进:
- emotion-auth服务启动问题修复
- 跨域配置优化
- 数据库连接配置统一
- OAuth服务实现完善
- WebSocket依赖更新

📚 文档:
- Jenkins部署说明文档
- 部署脚本使用指南
- 故障排查手册

🌐 部署环境:
- 目标服务器: 47.111.10.27
- 容器化部署到 /data/builds
- 前端部署到 /data/www/emotion-museum
- 支持test/prod环境配置
2025-07-18 11:41:11 +08:00

7.2 KiB

情感博物馆 Jenkins 部署说明

概述

本文档描述如何在Jenkins中配置和使用部署脚本来自动化部署情感博物馆项目的后端微服务和前端应用。

部署脚本说明

1. 后端微服务部署

主部署脚本

  • 文件路径: backend/deploy-all.sh
  • 功能: 一键部署所有后端微服务
  • 特性:
    • 支持单个服务失败不影响其他服务部署
    • 详细的部署日志和错误报告
    • 支持Jenkins环境变量
    • 容器化部署到远程服务器

单服务部署脚本

每个微服务模块都有独立的部署脚本:

  • backend/emotion-gateway/deploy.sh - 网关服务
  • backend/emotion-user/deploy.sh - 用户服务
  • backend/emotion-ai/deploy.sh - AI服务
  • backend/emotion-record/deploy.sh - 记录服务
  • backend/emotion-growth/deploy.sh - 成长服务
  • backend/emotion-websocket/deploy.sh - WebSocket服务
  • backend/emotion-auth/deploy.sh - 认证服务

2. 前端应用部署

前端部署脚本

  • 文件路径: web-flowith/deploy.sh
  • 功能: 构建并部署前端应用到远程服务器
  • 特性:
    • 自动构建Vue应用
    • 备份旧版本
    • 配置Nginx反向代理
    • 健康检查

Jenkins配置

1. 环境变量配置

在Jenkins中配置以下环境变量:

必需变量

# 部署目标服务器
DEPLOY_HOST=root@47.111.10.27

# 后端部署配置
REMOTE_BUILD_DIR=/data/builds
REMOTE_DOCKER_DIR=/data/docker
DEPLOY_ENV=test
PROJECT_NAME=emotion-museum

# 前端部署配置
REMOTE_WEB_DIR=/data/www/emotion-museum

可选变量

# 数据库配置
MYSQL_HOST=47.111.10.27
MYSQL_PORT=3306
MYSQL_DATABASE=emotion_museum
MYSQL_USERNAME=root

# Redis配置
REDIS_HOST=47.111.10.27
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DATABASE=0

# Nacos配置
NACOS_SERVER_ADDR=47.111.10.27:8848
NACOS_USERNAME=nacos
NACOS_PASSWORD=Peanut2817*#

# AI服务配置
COZE_API_TOKEN=your_coze_api_token

# JWT配置
JWT_SECRET=emotion-museum-secret-key-2025

2. Jenkins Pipeline 配置

后端微服务Pipeline

pipeline {
    agent any
    
    environment {
        DEPLOY_HOST = 'root@47.111.10.27'
        DEPLOY_ENV = 'test'
        PROJECT_NAME = 'emotion-museum'
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'your-git-repo-url'
            }
        }
        
        stage('Deploy Backend Services') {
            steps {
                dir('backend') {
                    sh './deploy-all.sh'
                }
            }
        }
    }
    
    post {
        always {
            // 发送部署结果通知
            emailext (
                subject: "部署结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
                body: "部署状态: ${currentBuild.result}\n构建链接: ${env.BUILD_URL}",
                to: "your-email@example.com"
            )
        }
    }
}

前端应用Pipeline

pipeline {
    agent any
    
    environment {
        DEPLOY_HOST = 'root@47.111.10.27'
        REMOTE_WEB_DIR = '/data/www/emotion-museum'
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'your-git-repo-url'
            }
        }
        
        stage('Deploy Frontend') {
            steps {
                dir('web-flowith') {
                    sh './deploy.sh'
                }
            }
        }
    }
    
    post {
        always {
            emailext (
                subject: "前端部署结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
                body: "部署状态: ${currentBuild.result}\n访问地址: http://47.111.10.27/emotion-museum/",
                to: "your-email@example.com"
            )
        }
    }
}

3. 单服务部署Job配置

为每个微服务创建单独的Jenkins Job:

pipeline {
    agent any
    
    parameters {
        choice(
            name: 'SERVICE_NAME',
            choices: ['emotion-gateway', 'emotion-user', 'emotion-ai', 'emotion-record', 'emotion-growth', 'emotion-websocket', 'emotion-auth'],
            description: '选择要部署的服务'
        )
    }
    
    environment {
        DEPLOY_HOST = 'root@47.111.10.27'
        DEPLOY_ENV = 'test'
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'your-git-repo-url'
            }
        }
        
        stage('Deploy Single Service') {
            steps {
                dir("backend/${params.SERVICE_NAME}") {
                    sh './deploy.sh'
                }
            }
        }
    }
}

部署流程

1. 全量部署流程

  1. 代码检出: 从Git仓库拉取最新代码
  2. 环境检查: 检查远程服务器连接和本地构建环境
  3. 服务构建: 使用Maven构建所有微服务
  4. 容器部署: 逐个部署服务到Docker容器
  5. 健康检查: 验证服务启动状态
  6. 部署报告: 生成详细的部署结果报告

2. 单服务部署流程

  1. 服务构建: 构建指定的微服务
  2. 容器更新: 停止旧容器,启动新容器
  3. 健康检查: 验证服务状态
  4. 结果反馈: 返回部署结果

3. 前端部署流程

  1. 依赖安装: 安装Node.js依赖
  2. 项目构建: 构建Vue生产版本
  3. 文件上传: 上传构建产物到服务器
  4. Nginx配置: 配置反向代理和静态文件服务
  5. 健康检查: 验证前端页面和API代理

监控和日志

1. 部署日志

  • 位置: Jenkins构建日志
  • 内容: 详细的部署步骤和错误信息
  • 格式: 带时间戳和颜色标识的结构化日志

2. 应用日志

  • 后端日志: /data/logs/emotion-museum/
  • Nginx日志: /data/logs/nginx/
  • 容器日志: docker logs <container_name>

3. 健康检查

  • 后端服务: http://47.111.10.27:<port>/actuator/health
  • 前端应用: http://47.111.10.27/emotion-museum/
  • API代理: http://47.111.10.27/api/

故障排查

1. 常见问题

服务启动失败

# 查看容器日志
docker logs <service_name>

# 查看容器状态
docker ps -a | grep emotion

# 重启服务
docker restart <service_name>

网络连接问题

# 检查端口占用
netstat -tlnp | grep <port>

# 检查防火墙
ufw status

# 测试服务连通性
curl -f http://localhost:<port>/actuator/health

前端访问问题

# 检查Nginx配置
nginx -t

# 重载Nginx配置
systemctl reload nginx

# 查看Nginx日志
tail -f /data/logs/nginx/emotion-museum-error.log

2. 回滚操作

后端服务回滚

# 停止当前容器
docker stop <service_name>

# 启动备份版本
docker run -d --name <service_name> <backup_image>

前端应用回滚

# 恢复备份版本
cd /data/www/emotion-museum/backup
cp -r backup_<timestamp> ../web-flowith

安全注意事项

  1. SSH密钥管理: 确保Jenkins服务器的SSH密钥安全
  2. 环境变量: 敏感信息使用Jenkins凭据管理
  3. 网络安全: 限制服务器访问权限
  4. 日志安全: 避免在日志中暴露敏感信息

联系信息

如有问题,请联系开发团队: