Compare commits
17 Commits
7e72449d1b
...
7cf507aaa1
| Author | SHA1 | Date |
|---|---|---|
|
|
7cf507aaa1 | |
|
|
02859b637e | |
|
|
cf65e91a45 | |
|
|
72d3ec8f65 | |
|
|
e0c6bf1b75 | |
|
|
35c3eb4908 | |
|
|
04e8cf309d | |
|
|
0a17a96363 | |
|
|
dfc40b892e | |
|
|
589159c025 | |
|
|
05f0cf1dad | |
|
|
8c036c003d | |
|
|
77a75a5487 | |
|
|
ddf030a178 | |
|
|
bae9bdd9a0 | |
|
|
c6dd75daeb | |
|
|
1813a448e8 |
|
|
@ -217,11 +217,14 @@ infrastructure:
|
|||
- cp sql/ry_20250523.sql docker/mysql/db/
|
||||
- cp sql/ry_config_20250902.sql docker/mysql/db/
|
||||
deployed_flag: .devops/.deployed_mysql
|
||||
wait_time: 30 # MySQL 需要更长时间初始化
|
||||
|
||||
- name: ruoyi-redis
|
||||
docker_service: ruoyi-redis
|
||||
deployed_flag: .devops/.deployed_redis
|
||||
wait_time: 10 # Redis 启动较快
|
||||
|
||||
- name: ruoyi-nacos
|
||||
docker_service: ruoyi-nacos
|
||||
deployed_flag: .devops/.deployed_nacos
|
||||
wait_time: 20 # Nacos 需要等待 MySQL 就绪
|
||||
|
|
|
|||
|
|
@ -54,15 +54,31 @@ class Deployer:
|
|||
timeout=timeout
|
||||
)
|
||||
|
||||
# 始终输出标准输出(如果有)
|
||||
if result.stdout:
|
||||
self.logger.debug(f"标准输出:\n{result.stdout}")
|
||||
# 限制输出长度,避免日志过大
|
||||
stdout_lines = result.stdout.strip().split('\n')
|
||||
if len(stdout_lines) > 50:
|
||||
self.logger.info(f"标准输出 (前30行):\n" + '\n'.join(stdout_lines[:30]))
|
||||
self.logger.info(f"... (省略 {len(stdout_lines) - 50} 行)")
|
||||
self.logger.info(f"标准输出 (后20行):\n" + '\n'.join(stdout_lines[-20:]))
|
||||
else:
|
||||
self.logger.info(f"标准输出:\n{result.stdout.strip()}")
|
||||
|
||||
if result.returncode != 0:
|
||||
self.logger.error(f"命令执行失败 (退出码: {result.returncode})")
|
||||
if result.stderr:
|
||||
self.logger.error(f"错误输出:\n{result.stderr}")
|
||||
# 限制错误输出长度
|
||||
stderr_lines = result.stderr.strip().split('\n')
|
||||
if len(stderr_lines) > 50:
|
||||
self.logger.error(f"错误输出 (前30行):\n" + '\n'.join(stderr_lines[:30]))
|
||||
self.logger.error(f"... (省略 {len(stderr_lines) - 50} 行)")
|
||||
self.logger.error(f"错误输出 (后20行):\n" + '\n'.join(stderr_lines[-20:]))
|
||||
else:
|
||||
self.logger.error(f"错误输出:\n{result.stderr.strip()}")
|
||||
return False
|
||||
|
||||
self.logger.info("命令执行成功")
|
||||
return True
|
||||
except subprocess.TimeoutExpired:
|
||||
self.logger.error(f"命令执行超时 (超时时间: {timeout}秒)")
|
||||
|
|
@ -136,14 +152,23 @@ class Deployer:
|
|||
def build_project(self, repo_config):
|
||||
"""构建项目"""
|
||||
repo_path = self.runtime_path / 'a-cloud-all'
|
||||
submodule_path = repo_path / repo_config['path']
|
||||
|
||||
self.logger.info(f"开始构建: {repo_config['name']}")
|
||||
|
||||
# 根据项目类型选择执行目录
|
||||
if repo_config['type'] == 'nodejs':
|
||||
# Node.js 项目在子模块目录执行
|
||||
build_dir = repo_path / repo_config['path']
|
||||
self.logger.info(f"Node.js 项目,在子模块目录执行构建")
|
||||
else:
|
||||
# Java 项目在主仓库根目录执行
|
||||
build_dir = repo_path
|
||||
self.logger.info(f"Java 项目,在主仓库根目录执行构建")
|
||||
|
||||
# 执行构建命令
|
||||
for cmd in repo_config['build_commands']:
|
||||
self.logger.info(f"执行构建命令: {cmd}")
|
||||
if not self.run_command(cmd, cwd=submodule_path, timeout=1800):
|
||||
if not self.run_command(cmd, cwd=build_dir, timeout=1800):
|
||||
self.logger.error(f"构建失败: {cmd}")
|
||||
return False
|
||||
|
||||
|
|
@ -307,38 +332,44 @@ class Deployer:
|
|||
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
|
||||
|
||||
|
||||
# 等待服务启动(特别是 MySQL 和 Redis)
|
||||
wait_time = infra.get('wait_time', 10)
|
||||
self.logger.info(f"等待 {name} 启动完成 ({wait_time} 秒)...")
|
||||
import time
|
||||
time.sleep(wait_time)
|
||||
|
||||
# 创建部署标记
|
||||
deployed_flag.parent.mkdir(parents=True, exist_ok=True)
|
||||
deployed_flag.touch()
|
||||
|
||||
|
||||
self.logger.info(f"基础设施部署完成: {name}")
|
||||
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -55,16 +55,22 @@ class GitMonitor:
|
|||
# 文件处理器
|
||||
file_handler = logging.FileHandler(log_file, encoding='utf-8')
|
||||
file_handler.setFormatter(formatter)
|
||||
file_handler.setLevel(log_level)
|
||||
|
||||
# 控制台处理器
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setFormatter(formatter)
|
||||
console_handler.setLevel(log_level)
|
||||
|
||||
# 配置 logger
|
||||
# 配置根 logger,让所有子 logger 都能输出
|
||||
root_logger = logging.getLogger()
|
||||
root_logger.setLevel(log_level)
|
||||
root_logger.addHandler(file_handler)
|
||||
root_logger.addHandler(console_handler)
|
||||
|
||||
# 配置当前 logger
|
||||
self.logger = logging.getLogger('GitMonitor')
|
||||
self.logger.setLevel(log_level)
|
||||
self.logger.addHandler(file_handler)
|
||||
self.logger.addHandler(console_handler)
|
||||
|
||||
def get_remote_commit(self, repo_url, branch):
|
||||
"""获取远程仓库的最新提交 hash"""
|
||||
|
|
|
|||
4
use.md
4
use.md
|
|
@ -1,4 +1,4 @@
|
|||
# RuoYi-Cloud 代码拉取说明
|
||||
## RuoYi-Cloud 代码拉取说明
|
||||
|
||||
## 首次克隆代码
|
||||
```bash
|
||||
|
|
@ -45,4 +45,4 @@ git submodule update --remote ruoyi-gateway
|
|||
- `git pull --recurse-submodules` 只会拉取主仓库,不会自动更新子模块代码
|
||||
- 必须执行 `git submodule update` 才会真正拉取子模块的代码
|
||||
- `--init` 参数会初始化还未初始化的子模块
|
||||
- `--recursive` 参数会递归更新所有嵌套的子模块
|
||||
- `--recursive` 参数会递归更新所有嵌套的子模块
|
||||
|
|
|
|||
Loading…
Reference in New Issue