Files
happy-life-star/docs/deployment/Jenkins-Pipeline配置.md
T
peanut 26f0cdd760 feat: 完成项目整理优化和生产环境配置
🧹 项目结构优化:
- 删除重复和过时的文件
- 整理文档到docs目录结构
- 优化配置文件到configs目录
- 创建清晰的PROJECT_STRUCTURE.md

🔧 中间件配置:
- 重启MySQL/Redis/Nacos中间件
- 使用现有数据目录,确保数据完整性
- 统一密码配置: MySQL(EmotionMuseum2025*#), Nacos(Peanut2817*#)

🌐 Nginx配置:
- 配置前端路径: /emotion-museum
- 配置API代理: /api/ -> 19000
- 配置WebSocket代理: /ws/ -> 19007
- 添加健康检查端点: /health

📋 部署脚本优化:
- restart-middleware.sh - 中间件重启脚本
- setup-nginx.sh - Nginx配置脚本
- cleanup-project.sh - 项目清理脚本
- one-click-deploy.sh - 一键部署脚本

📖 文档完善:
- DEPLOYMENT_FINAL.md - 最终部署指南
- PROJECT_STRUCTURE.md - 项目结构说明
- 完整的运维和故障排查指南

 生产环境就绪:
- 中间件: MySQL/Redis/Nacos 运行正常
- Nginx: 反向代理配置完成
- 访问地址: http://47.111.10.27/emotion-museum
- 健康检查: http://47.111.10.27/health

🎯 项目现状:
- 10个微服务模块完整
- 前后端分离架构
- 容器化部署
- 统一配置管理
- 完整的部署和运维体系
2025-07-21 13:55:36 +08:00

7.1 KiB

情感博物馆 Jenkins Pipeline 配置指南

概述

本文档描述了优化后的Jenkins CI/CD流水线配置,采用分离式部署架构:

  • 构建阶段: 在Jenkins服务器上编译打包所有微服务
  • 部署阶段: 将jar包传输到远程应用服务器并进行容器化部署

部署脚本架构

1. 脚本分类

🔨 构建脚本

  • build-all.sh: 专门用于Jenkins构建阶段,编译所有微服务jar包
  • 特点: 仅在Jenkins服务器执行,不涉及远程操作

🚀 部署脚本

  • deploy-remote.sh: 专门用于远程部署,传输jar包并部署到应用服务器
  • 特点: 假设jar包已构建完成,专注于远程部署

🔄 综合脚本

  • deploy-all.sh: 支持多种模式的综合脚本
  • 模式:
    • full: 完整模式 (构建+部署)
    • build: 仅构建模式
    • deploy: 仅部署模式

2. 服务列表

所有脚本支持以下10个微服务:

服务名称 端口 描述
emotion-gateway 19000 API网关服务
emotion-user 19001 用户管理服务
emotion-ai 19002 AI聊天服务
emotion-record 19003 记录管理服务
emotion-growth 19004 成长跟踪服务
emotion-explore 19005 探索服务
emotion-reward 19006 奖励服务
emotion-websocket 19007 WebSocket服务
emotion-auth 19008 认证服务
emotion-stats 19009 统计服务

Jenkins Pipeline 配置

1. 推荐的Pipeline配置

方案一:分离式Pipeline (推荐)

pipeline {
    agent any
    
    environment {
        DEPLOY_ENV = 'test'
        PROJECT_NAME = 'emotion-museum'
        REMOTE_HOST = 'root@47.111.10.27'
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'master', url: 'your-git-repo-url'
            }
        }
        
        stage('Build') {
            steps {
                dir('backend') {
                    sh './build-all.sh'
                }
            }
            post {
                always {
                    // 归档构建产物
                    archiveArtifacts artifacts: 'backend/*/target/*.jar', fingerprint: true
                }
            }
        }
        
        stage('Deploy to Remote') {
            steps {
                dir('backend') {
                    sh './deploy-remote.sh'
                }
            }
        }
        
        stage('Health Check') {
            steps {
                script {
                    // 等待服务启动
                    sleep 30
                    
                    // 检查关键服务
                    def services = ['19000', '19001', '19002', '19008']
                    services.each { port ->
                        sh "curl -f http://47.111.10.27:${port}/actuator/health || exit 1"
                    }
                }
            }
        }
    }
    
    post {
        always {
            // 发送部署结果通知
            emailext (
                subject: "部署结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
                body: """
                部署状态: ${currentBuild.result}
                构建链接: ${env.BUILD_URL}
                部署环境: ${env.DEPLOY_ENV}
                """,
                to: "your-email@example.com"
            )
        }
        success {
            echo '🎉 部署成功!'
        }
        failure {
            echo '❌ 部署失败,请检查日志'
        }
    }
}

方案二:单一Pipeline

pipeline {
    agent any
    
    environment {
        DEPLOY_ENV = 'test'
        DEPLOY_MODE = 'full'  // full, build, deploy
        PROJECT_NAME = 'emotion-museum'
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'master', url: 'your-git-repo-url'
            }
        }
        
        stage('Deploy') {
            steps {
                dir('backend') {
                    sh './deploy-all.sh'
                }
            }
        }
    }
}

2. 环境变量配置

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

必需变量

# 部署配置
DEPLOY_ENV=test                    # 部署环境
DEPLOY_HOST=root@47.111.10.27     # 目标服务器
PROJECT_NAME=emotion-museum       # 项目名称

# 远程路径配置
REMOTE_BUILD_DIR=/data/builds     # jar包存储目录
REMOTE_DOCKER_DIR=/data/docker    # Docker配置目录

可选变量

# 部署模式 (仅deploy-all.sh使用)
DEPLOY_MODE=full                  # full, build, deploy

# 数据库配置
MYSQL_HOST=47.111.10.27
MYSQL_PASSWORD=EmotionMuseum2025*#

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

3. 多环境部署配置

测试环境

environment {
    DEPLOY_ENV = 'test'
    DEPLOY_HOST = 'root@47.111.10.27'
}

生产环境

environment {
    DEPLOY_ENV = 'prod'
    DEPLOY_HOST = 'root@production-server'
}

使用方法

1. 本地测试

仅构建

cd backend
./build-all.sh

仅部署 (需要先有jar包)

cd backend
./deploy-remote.sh

完整部署

cd backend
./deploy-all.sh
# 或指定模式
DEPLOY_MODE=full ./deploy-all.sh

2. Jenkins执行

分离式执行

# 构建阶段
./build-all.sh

# 部署阶段
./deploy-remote.sh

综合执行

# 根据DEPLOY_MODE环境变量决定执行模式
./deploy-all.sh

优势特点

1. 🔄 分离式架构

  • 构建与部署分离: Jenkins服务器专注构建,应用服务器专注运行
  • 资源优化: 避免在应用服务器上安装构建工具
  • 安全性: 减少应用服务器的攻击面

2. 🛡️ 容错机制

  • 单服务失败不影响其他服务: 继续部署其他服务
  • 详细错误报告: 每个服务的部署状态和错误信息
  • 回滚支持: 保留旧版本容器,支持快速回滚

3. 📊 监控与报告

  • 实时日志: 详细的部署过程日志
  • 健康检查: 自动验证服务启动状态
  • 部署报告: 完整的部署统计和结果报告

4. 🔧 灵活配置

  • 多模式支持: 支持仅构建、仅部署、完整部署
  • 环境变量: 支持Jenkins环境变量覆盖
  • 多环境: 支持test/prod等多环境部署

故障排查

1. 构建失败

# 检查Java和Maven版本
java -version
mvn -version

# 查看详细构建日志
./build-all.sh

2. 部署失败

# 检查SSH连接
ssh 'root@47.111.10.27' "echo 'test'"

# 检查远程Docker环境
ssh 'root@47.111.10.27' "docker --version"

# 查看容器日志
ssh 'root@47.111.10.27' "docker logs <service_name>"

3. 服务启动失败

# 检查端口占用
ssh 'root@47.111.10.27' "netstat -tlnp | grep <port>"

# 检查服务健康状态
curl -f http://47.111.10.27:<port>/actuator/health

联系支持

如遇到问题,请:

  1. 查看Jenkins构建日志
  2. 检查脚本执行日志
  3. 验证环境变量配置
  4. 联系开发团队并提供完整日志

文档版本: v2.0
更新时间: 2025-07-18
维护团队: 情感博物馆开发团队