From ee2f8303aa3b208ccf2f5d14ad2d5d7e2ed54ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Fri, 9 Jan 2026 17:39:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20DevOps=20=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=BB=A5=E6=94=AF=E6=8C=81=E5=AE=8C=E6=95=B4=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加基础设施服务配置(MySQL, Redis, Nacos) - 基础设施服务只部署一次,使用标记文件跟踪 - MySQL 部署前自动复制 SQL 文件 - deployer.py 已处理构建产物复制逻辑 - 部署脚本统一使用 docker-compose build && up - 所有操作在 runtime 目录下进行 --- .devops/config.yaml | 17 ++++++++++++ .devops/deployer.py | 48 +++++++++++++++++++++++++++++++++- .devops/scripts/deploy-java.sh | 8 +++--- .devops/scripts/deploy-ui.sh | 5 ++-- 4 files changed, 70 insertions(+), 8 deletions(-) diff --git a/.devops/config.yaml b/.devops/config.yaml index 1f1f921..8d3c71d 100644 --- a/.devops/config.yaml +++ b/.devops/config.yaml @@ -208,3 +208,20 @@ logging: file: .devops/logs/devops.log max_size: 10485760 # 10MB backup_count: 5 + +# 基础设施服务配置(只部署一次) +infrastructure: + - name: ruoyi-mysql + docker_service: ruoyi-mysql + pre_deploy_commands: + - cp sql/ry_20250523.sql docker/mysql/db/ + - cp sql/ry_config_20250902.sql docker/mysql/db/ + deployed_flag: .devops/.deployed_mysql + + - name: ruoyi-redis + docker_service: ruoyi-redis + deployed_flag: .devops/.deployed_redis + + - name: ruoyi-nacos + docker_service: ruoyi-nacos + deployed_flag: .devops/.deployed_nacos diff --git a/.devops/deployer.py b/.devops/deployer.py index 85cf0c8..4d9bf6d 100644 --- a/.devops/deployer.py +++ b/.devops/deployer.py @@ -247,7 +247,11 @@ class Deployer: if not self.ensure_main_repo(): return False - # 2. 更新子模块 + # 2. 部署基础设施(首次部署) + if not self.deploy_infrastructure(): + return False + + # 3. 更新子模块 if not self.update_submodule(repo_config): return False @@ -273,3 +277,45 @@ class Deployer: except Exception as e: self.logger.error(f"部署过程中发生异常: {e}", exc_info=True) return False + + def deploy_infrastructure(self): + """部署基础设施服务(只部署一次)""" + if 'infrastructure' not in self.config: + return True + + repo_path = self.runtime_path / 'a-cloud-all' + + for infra in self.config['infrastructure']: + name = infra['name'] + deployed_flag = repo_path / infra['deployed_flag'] + + # 检查是否已部署 + if deployed_flag.exists(): + self.logger.info(f"基础设施 {name} 已部署,跳过") + continue + + self.logger.info(f"部署基础设施: {name}") + + # 执行预部署命令 + if 'pre_deploy_commands' in infra: + for cmd in infra['pre_deploy_commands']: + if not self.run_command(cmd, cwd=repo_path): + self.logger.error(f"预部署命令失败: {cmd}") + return False + + # 部署服务 + docker_service = infra['docker_service'] + docker_dir = repo_path / 'docker' + + cmd = f"docker-compose build --no-cache {docker_service} && docker-compose up -d {docker_service}" + if not self.run_command(cmd, cwd=docker_dir, timeout=1800): + self.logger.error(f"部署失败: {name}") + return False + + # 创建部署标记 + deployed_flag.parent.mkdir(parents=True, exist_ok=True) + deployed_flag.touch() + + self.logger.info(f"基础设施部署完成: {name}") + + return True diff --git a/.devops/scripts/deploy-java.sh b/.devops/scripts/deploy-java.sh index 5b1458f..a422f61 100755 --- a/.devops/scripts/deploy-java.sh +++ b/.devops/scripts/deploy-java.sh @@ -1,6 +1,7 @@ #!/bin/bash # Java 服务部署脚本 # 参数: $1=服务名称, $2=docker服务名, $3=docker-compose路径 +# 注意:jar 文件已由 deployer.py 复制到 docker 目录 set -e # 遇到错误立即退出 @@ -29,11 +30,8 @@ echo "项目根目录: $PROJECT_ROOT" # 进入 docker 目录 cd "$PROJECT_ROOT/docker" -echo "重新构建 Docker 镜像..." -docker-compose build --no-cache "$DOCKER_SERVICE" - -echo "启动服务..." -docker-compose up -d "$DOCKER_SERVICE" +echo "重新构建 Docker 镜像并启动服务..." +docker-compose build --no-cache "$DOCKER_SERVICE" && docker-compose up -d "$DOCKER_SERVICE" echo "等待服务启动..." sleep 5 diff --git a/.devops/scripts/deploy-ui.sh b/.devops/scripts/deploy-ui.sh index 73494fe..8f52fd1 100755 --- a/.devops/scripts/deploy-ui.sh +++ b/.devops/scripts/deploy-ui.sh @@ -1,6 +1,7 @@ #!/bin/bash # UI 前端部署脚本 # 参数: $1=服务名称, $2=docker服务名, $3=docker-compose路径 +# 注意:dist 目录已由 deployer.py 复制到 docker/nginx/html/dist set -e # 遇到错误立即退出 @@ -29,8 +30,8 @@ echo "项目根目录: $PROJECT_ROOT" # 进入 docker 目录 cd "$PROJECT_ROOT/docker" -echo "重启 Nginx 服务..." -docker-compose restart "$DOCKER_SERVICE" +echo "重新构建 Docker 镜像并启动服务..." +docker-compose build --no-cache "$DOCKER_SERVICE" && docker-compose up -d "$DOCKER_SERVICE" echo "等待服务启动..." sleep 3