# 情感博物馆 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 (推荐) ```groovy 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 ```groovy 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中配置以下环境变量: #### 必需变量 ```bash # 部署配置 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配置目录 ``` #### 可选变量 ```bash # 部署模式 (仅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. 多环境部署配置 #### 测试环境 ```groovy environment { DEPLOY_ENV = 'test' DEPLOY_HOST = 'root@47.111.10.27' } ``` #### 生产环境 ```groovy environment { DEPLOY_ENV = 'prod' DEPLOY_HOST = 'root@production-server' } ``` ## 使用方法 ### 1. 本地测试 #### 仅构建 ```bash cd backend ./build-all.sh ``` #### 仅部署 (需要先有jar包) ```bash cd backend ./deploy-remote.sh ``` #### 完整部署 ```bash cd backend ./deploy-all.sh # 或指定模式 DEPLOY_MODE=full ./deploy-all.sh ``` ### 2. Jenkins执行 #### 分离式执行 ```bash # 构建阶段 ./build-all.sh # 部署阶段 ./deploy-remote.sh ``` #### 综合执行 ```bash # 根据DEPLOY_MODE环境变量决定执行模式 ./deploy-all.sh ``` ## 优势特点 ### 1. 🔄 分离式架构 - **构建与部署分离**: Jenkins服务器专注构建,应用服务器专注运行 - **资源优化**: 避免在应用服务器上安装构建工具 - **安全性**: 减少应用服务器的攻击面 ### 2. 🛡️ 容错机制 - **单服务失败不影响其他服务**: 继续部署其他服务 - **详细错误报告**: 每个服务的部署状态和错误信息 - **回滚支持**: 保留旧版本容器,支持快速回滚 ### 3. 📊 监控与报告 - **实时日志**: 详细的部署过程日志 - **健康检查**: 自动验证服务启动状态 - **部署报告**: 完整的部署统计和结果报告 ### 4. 🔧 灵活配置 - **多模式支持**: 支持仅构建、仅部署、完整部署 - **环境变量**: 支持Jenkins环境变量覆盖 - **多环境**: 支持test/prod等多环境部署 ## 故障排查 ### 1. 构建失败 ```bash # 检查Java和Maven版本 java -version mvn -version # 查看详细构建日志 ./build-all.sh ``` ### 2. 部署失败 ```bash # 检查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 " ``` ### 3. 服务启动失败 ```bash # 检查端口占用 ssh 'root@47.111.10.27' "netstat -tlnp | grep " # 检查服务健康状态 curl -f http://47.111.10.27:/actuator/health ``` ## 联系支持 如遇到问题,请: 1. 查看Jenkins构建日志 2. 检查脚本执行日志 3. 验证环境变量配置 4. 联系开发团队并提供完整日志 --- **文档版本**: v2.0 **更新时间**: 2025-07-18 **维护团队**: 情感博物馆开发团队