# MonolithicDeploymentTool **Repository Path**: dev-ops-bwl/monolithic-deployment-tool ## Basic Information - **Project Name**: MonolithicDeploymentTool - **Description**: 单体部署工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-11 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 矿山气象灾害风险防御系统部署工具 ## 简介 本工具用于将矿山气象灾害风险防御系统的测试环境代码部署到生产环境,实现自动化下载、目录创建、文件传输和压缩等功能,提高部署效率和准确性。 ## 功能特性 - **自动化部署流程**:从服务器下载、目录创建到文件传输的全流程自动化 - **智能版本管理**:支持自动版本号生成和递增,无需手动指定 - **灵活的文件映射**:支持远程文件到本地目录的灵活映射,支持通配符 - **多种认证方式**:支持SSH密码认证和密钥认证 - **高效文件传输**:多线程文件传输,支持批量下载 - **前端目录压缩**:支持多目录批量压缩,生成ZIP文件 - **模板目录复制**:自动复制模板目录结构,保证部署一致性 - **完善的日志系统**:详细的日志记录,便于问题排查 - **部署报告生成**:自动生成部署报告,包含传输和压缩统计 - **多种运行模式**:支持命令行、GUI图形界面和交互式向导 - **模拟执行功能**:支持dry-run模式,模拟执行部署过程 - **文件列表预览**:支持仅列出需要传输的文件,不执行实际传输 - **强制覆盖选项**:支持强制覆盖现有目录 - **自定义配置文件**:支持使用自定义配置文件 ## 技术栈 - Python 3.12.8 - paramiko(SSH连接和文件传输) - argparse(命令行参数解析) - logging(日志记录) - PyQt5(图形用户界面) - json(配置文件处理) - os, shutil, zipfile(文件系统操作) - threading(多线程支持) ## 安装步骤 ### 1. 准备Python环境 确保安装了Python 3.7或更高版本: ```bash python --version ``` ### 2. 安装依赖 在项目目录下执行以下命令安装所需依赖: ```bash pip install -r requirements.txt ``` ### 3. 配置文件设置 项目使用`config.json`作为默认配置文件,包含以下主要配置项: - **server部分**: - `host`:测试环境Linux服务器IP地址 - `port`:SSH端口号(默认22) - `username`:服务器登录用户名 - `auth_type`:认证方式,可选值:`password`(密码认证)或`key`(密钥认证) - `password`:密码认证时的密码 - `key_file`:密钥认证时的私钥文件路径(支持.ppk格式) - **file_mapping部分**: 定义远程文件到本地文件的映射关系,每个映射包含: - `remote`:远程服务器上的文件路径(支持通配符) - `local`:本地发布目录中的相对路径 - `type`:文件类型,可选值:`file`或`directory`(默认`file`) - `download_enabled`:是否启用下载(默认`true`) - **compression部分**: 定义需要压缩的目录和输出ZIP文件路径,每个压缩任务包含: - `source_dir`:需要压缩的源目录(相对于发布目录) - `output_zip`:输出的ZIP文件路径(相对于发布目录) - **paths部分**: - `template_dir`:模板文件夹路径 - `base_dir`:基础发布目录 - **settings部分**: - `retry_count`:连接重试次数 - `retry_interval`:重试间隔(秒) - `log_level`:日志级别 - `log_max_bytes`:单个日志文件最大字节数 - `log_backup_count`:保留的日志文件数量 - **version_management部分**: - `enabled`:是否启用自动版本管理(默认true) - `format_type`:版本格式类型(默认"standard") - `auto_increment`:是否自动递增版本号(默认true) - `prefix`:版本号前缀(默认"序号:") ## 使用方法 ### 1. 基本用法(命令行) ```bash python deploy.py --version 60 ``` 这将创建一个名为`序号:60-YYYYMMDDHHmmss`的发布目录,并下载配置中指定的文件。 ### 2. 自动版本管理 如果启用了自动版本管理,可以不指定版本号: ```bash python deploy.py ``` 系统会自动检测最新版本号并生成下一个序号。 ### 3. 图形用户界面(GUI) 启动图形界面进行操作: ```bash python deploy.py ``` 默认情况下,工具会启动GUI模式。如果需要使用命令行模式,可以使用`--nogui`参数: ```bash python deploy.py --nogui --version 60 ``` GUI界面提供了直观的操作方式,包括: - 部署选项卡:配置版本号和部署参数 - 配置选项卡:查看和修改配置信息 - 日志选项卡:实时查看部署日志 ### 4. 交互式配置向导 运行交互式配置向导: ```bash python deploy.py --wizard ``` 向导将引导您完成所有配置步骤,包括: - 服务器连接信息配置 - 路径和文件映射设置 - 压缩选项配置 - 系统设置配置 配置完成后,向导将自动执行部署过程。 ### 命令行参数 ``` 部署工具 可选参数: -h, --help 显示帮助信息并退出 -v VERSION, --version VERSION 发布版本号,用于目录命名(如果未指定且启用了自动版本管理,则自动生成) -c CONFIG_FILE, --config CONFIG_FILE 配置文件路径(默认: config.json) -f, --force 强制覆盖现有目录 --list-files 仅列出需要传输的文件,不执行实际传输 --dry-run 模拟执行部署过程,不实际创建目录和传输文件 --nogui 不启动图形用户界面,使用命令行模式 --wizard 以交互式配置向导模式运行 ``` ### 使用示例 #### 1. 基本部署 ```bash python deploy.py -v 60 ``` #### 2. 使用自定义配置文件 ```bash python deploy.py -v 60 -c my_config.json ``` #### 3. 强制覆盖已存在的目录 ```bash python deploy.py -v 60 -f ``` #### 4. 仅列出文件不执行传输 ```bash python deploy.py -v 60 --list-files ``` #### 5. 模拟执行部署 ```bash python deploy.py -v 60 --dry-run ``` #### 6. 命令行模式部署 ```bash python deploy.py --nogui -v 60 ``` #### 7. 交互式向导模式 ```bash python deploy.py --wizard ``` ## 配置示例 ### 1. 文件映射配置 ```json { "file_mapping": [ { "remote": "/path/to/remote/file.jar", "local": "services/mineweatherhazard-project/mineweatherhazard-project.jar", "type": "file", "download_enabled": true }, { "remote": "/path/to/remote/directory/*", "local": "website/mineweatherhazard", "type": "directory", "download_enabled": true } ] } ``` ### 2. 压缩配置 ```json { "compression": [ { "source_dir": "website\\mineweatherhazard\\dist", "output_zip": "website\\mineweatherhazard\\dist.zip" }, { "source_dir": "website\\mineweatherhazard-largscreen\\largeScreen", "output_zip": "website\\mineweatherhazard-largscreen\\largeScreen.zip" } ] } ``` ## 目录结构 ### 项目目录结构 ``` monolithic-deployment-tool/ ├── modules/ # 功能模块目录 │ ├── __pycache__/ # Python编译文件 │ ├── compression_manager.py # 压缩管理模块 │ ├── config_manager.py # 配置管理模块 │ ├── directory_manager.py # 目录管理模块 │ ├── gui_manager.py # GUI管理模块 │ ├── logger_manager.py # 日志管理模块 │ ├── transfer_manager.py # 传输管理模块 │ ├── version_manager.py # 版本管理模块 │ └── wizard_manager.py # 向导管理模块 ├── logs/ # 日志文件目录 ├── docs/ # 文档目录 ├── recoreds/ # 模板文件夹 ├── README.md # 项目说明文档 ├── config.json # 配置文件 ├── deploy.py # 主部署脚本 ├── mining_deploy.spec # PyInstaller打包配置 ├── package.py # 打包脚本 ├── requirements.txt # 依赖列表 └── test_*.py # 测试脚本 ``` ### 部署后目录结构 ``` 序号:版本号-时间戳/ ├── services/ # 服务端文件目录 │ ├── mineweatherhazard-project/ # 主项目 │ │ └── mineweatherhazard-project.jar # 主项目JAR包 │ ├── mineweatherhazard-scheduled-job/ # 定时任务项目 │ │ └── mineweatherhazard-scheduled-job-project.jar # 定时任务JAR包 │ └── mineweatherhazard-python-project/ # Python项目 │ └── (Python项目文件) ├── db/ # 数据库相关文件 │ └── (数据库脚本和配置文件) ├── website/ # 前端文件目录 │ ├── mineweatherhazard/ # 主前端 │ │ ├── (前端文件) │ │ └── dist.zip # 压缩后的前端文件 │ └── mineweatherhazard-largscreen/ # 大屏显示前端 │ ├── (前端文件) │ └── largeScreen.zip # 压缩后的大屏文件 └── reports/ # 部署报告目录 └── deployment_report_YYYYMMDD_HHMMSS.txt # 部署报告 ``` ## 日志和报告 ### 日志文件 - 日志文件保存在`logs/`目录下,文件名为`deploy.log` - 支持日志轮转,根据配置自动分割日志文件 - 日志包含详细的部署过程信息,包括连接、传输、压缩等步骤 ### 部署报告 每次部署完成后,会在发布目录的`reports/`子目录下生成详细的部署报告,包含以下信息: - 部署日期和时间 - 发布版本号和目录 - 服务器连接信息 - 文件传输统计(总文件数、成功数、失败数) - 成功和失败的文件列表 - 压缩统计(总任务数、成功数、失败数) - 压缩详情(每个压缩任务的源目录、目标ZIP文件和文件数) ## 常见问题与解决方案 ### 1. 连接失败 - 检查服务器IP地址和端口是否正确 - 验证用户名和密码/密钥是否有效 - 确认服务器防火墙是否允许SSH连接 - 检查网络连接是否稳定 ### 2. 文件下载失败 - 检查远程文件路径是否正确 - 确认服务器上的文件是否存在 - 检查权限设置,确保用户有读取权限 - 验证文件映射配置是否正确 ### 3. 目录创建失败 - 检查目标路径是否有写入权限 - 确认磁盘空间是否充足 - 检查模板目录是否存在 ### 4. 密钥认证问题 - 确保私钥文件格式正确(支持.ppk格式) - 检查密钥文件路径是否正确 - 确认密钥文件有读取权限 ### 5. 文件压缩失败 - 检查源目录是否存在 - 确认源目录有足够的读取权限 - 确保目标路径有写入权限 - 检查压缩配置格式是否正确 ### 6. GUI启动失败 - 确认已安装PyQt5库 - 检查Python版本是否兼容 - 尝试使用命令行模式运行 ## 注意事项 1. **安全性警告**:配置文件中的密码会以明文形式保存,请确保配置文件安全 2. **备份重要数据**:在执行部署操作前,建议备份重要文件 3. **权限设置**:确保运行程序的用户有足够权限创建目录和写入文件 4. **网络稳定性**:确保本地与远程服务器之间网络连接稳定 5. **版本号格式**:版本号应使用数字格式,用于目录命名 6. **配置文件验证**:修改配置文件后,建议先使用`--dry-run`模式验证 7. **日志查看**:部署过程中遇到问题,及时查看日志文件 8. **定期清理**:定期清理旧的日志文件和部署目录,释放磁盘空间 ## 版本历史 - **v1.3.0**: - 优化GUI界面,提升用户体验 - 增强日志系统,提供更详细的日志信息 - 改进部署报告,增加更多统计信息 - 优化文件传输算法,提高传输效率 - **v1.2.0**: - 新增发布序号自动管理功能 - 新增图形用户界面(GUI) - 新增交互式配置向导 - **v1.1.0**:新增文件压缩功能,支持前端目录自动压缩 - **v1.0.0**:初始版本,支持基本的文件下载和目录管理功能 ## 开发说明 ### 模块结构 - **compression_manager.py**:处理文件压缩功能 - **config_manager.py**:加载和管理配置文件 - **directory_manager.py**:创建目录和复制模板 - **gui_manager.py**:图形用户界面实现 - **logger_manager.py**:日志系统配置和管理 - **transfer_manager.py**:SSH连接和文件传输 - **version_manager.py**:版本号生成和管理 - **wizard_manager.py**:交互式配置向导 ### 打包成可执行文件 使用PyInstaller将Python脚本打包成可执行文件: ```bash python package.py ``` 打包后的可执行文件将生成在`dist/`目录下。 ## 联系方式 如有问题,请联系系统管理员。