更新 DevOps 系统以支持完整部署流程

- 添加基础设施服务配置(MySQL, Redis, Nacos)
- 基础设施服务只部署一次,使用标记文件跟踪
- MySQL 部署前自动复制 SQL 文件
- deployer.py 已处理构建产物复制逻辑
- 部署脚本统一使用 docker-compose build && up
- 所有操作在 runtime 目录下进行
This commit is contained in:
孙小云 2026-01-09 17:39:27 +08:00
parent 790e182322
commit ee2f8303aa
4 changed files with 70 additions and 8 deletions

View File

@ -208,3 +208,20 @@ logging:
file: .devops/logs/devops.log file: .devops/logs/devops.log
max_size: 10485760 # 10MB max_size: 10485760 # 10MB
backup_count: 5 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

View File

@ -247,7 +247,11 @@ class Deployer:
if not self.ensure_main_repo(): if not self.ensure_main_repo():
return False return False
# 2. 更新子模块 # 2. 部署基础设施(首次部署)
if not self.deploy_infrastructure():
return False
# 3. 更新子模块
if not self.update_submodule(repo_config): if not self.update_submodule(repo_config):
return False return False
@ -273,3 +277,45 @@ class Deployer:
except Exception as e: except Exception as e:
self.logger.error(f"部署过程中发生异常: {e}", exc_info=True) self.logger.error(f"部署过程中发生异常: {e}", exc_info=True)
return False 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

View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# Java 服务部署脚本 # Java 服务部署脚本
# 参数: $1=服务名称, $2=docker服务名, $3=docker-compose路径 # 参数: $1=服务名称, $2=docker服务名, $3=docker-compose路径
# 注意jar 文件已由 deployer.py 复制到 docker 目录
set -e # 遇到错误立即退出 set -e # 遇到错误立即退出
@ -29,11 +30,8 @@ echo "项目根目录: $PROJECT_ROOT"
# 进入 docker 目录 # 进入 docker 目录
cd "$PROJECT_ROOT/docker" cd "$PROJECT_ROOT/docker"
echo "重新构建 Docker 镜像..." echo "重新构建 Docker 镜像并启动服务..."
docker-compose build --no-cache "$DOCKER_SERVICE" docker-compose build --no-cache "$DOCKER_SERVICE" && docker-compose up -d "$DOCKER_SERVICE"
echo "启动服务..."
docker-compose up -d "$DOCKER_SERVICE"
echo "等待服务启动..." echo "等待服务启动..."
sleep 5 sleep 5

View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# UI 前端部署脚本 # UI 前端部署脚本
# 参数: $1=服务名称, $2=docker服务名, $3=docker-compose路径 # 参数: $1=服务名称, $2=docker服务名, $3=docker-compose路径
# 注意dist 目录已由 deployer.py 复制到 docker/nginx/html/dist
set -e # 遇到错误立即退出 set -e # 遇到错误立即退出
@ -29,8 +30,8 @@ echo "项目根目录: $PROJECT_ROOT"
# 进入 docker 目录 # 进入 docker 目录
cd "$PROJECT_ROOT/docker" cd "$PROJECT_ROOT/docker"
echo "重启 Nginx 服务..." echo "重新构建 Docker 镜像并启动服务..."
docker-compose restart "$DOCKER_SERVICE" docker-compose build --no-cache "$DOCKER_SERVICE" && docker-compose up -d "$DOCKER_SERVICE"
echo "等待服务启动..." echo "等待服务启动..."
sleep 3 sleep 3