# python 部署脚本 **Repository Path**: xiaoyinshi/python---deployment-script ## Basic Information - **Project Name**: python 部署脚本 - **Description**: 这是一个用 Python 编写的自动化部署脚本,用于将 Web 应用程序部署到远程服务器。该脚本支持从指定的 Git 仓库和分支拉取代码,并支持分支名的模糊匹配。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-12 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, 自动化, 部署 ## README # Python 部署脚本 这是一个用 Python 编写的自动化部署脚本,用于将 Web 应用程序部署到远程服务器。该脚本支持从指定的 Git 仓库和分支拉取代码,并支持分支名的模糊匹配。 ## 功能特性 - 🔄 从指定 Git 仓库拉取代码 - 🌿 支持分支名模糊匹配 - 📦 自动安装项目依赖 (pnpm install) - 🏗️ 自动构建项目 (pnpm build) - 📦 压缩构建文件 - 🔐 SSH 连接远程服务器 - 💾 自动备份当前版本 - ⬆️ 上传并部署新版本 - 🔄 失败时自动回滚 - 🧹 清理临时文件 ## 安装依赖 ```bash # 使用 uv 安装依赖 uv sync # 或者使用 pip pip install -r requirements.txt ``` ## 配置环境变量 1. 复制环境变量示例文件: ```bash cp env.example .env ``` 2. 编辑 `.env` 文件,配置你的服务器信息: ```env # 服务器配置 SERVER_HOST=your-server-host.com SERVER_PORT=22 SERVER_USERNAME=your-username SERVER_PASSWORD=your-password # 远程部署路径 REMOTE_PATH=/var/www/your-app ``` ## 使用方法 ```bash # 基本用法 python main.py <分支模式> [项目名称] # 示例:部署 main 分支 python main.py https://github.com/user/repo.git "main" # 示例:部署 feature 分支(模糊匹配) python main.py https://github.com/user/repo.git "feature/*" # 示例:部署 develop 分支并指定项目名称 python main.py https://github.com/user/repo.git "develop" my-project # 示例:部署 release 分支(模糊匹配) python main.py https://github.com/user/repo.git "release/.*" ``` ## 分支匹配规则 脚本支持正则表达式模式来匹配分支名: - `"main"` - 精确匹配 main 分支 - `"feature/*"` - 匹配所有以 feature/ 开头的分支 - `"release/.*"` - 匹配所有以 release/ 开头的分支 - `"hotfix.*"` - 匹配所有以 hotfix 开头的分支 - `".*test.*"` - 匹配包含 test 的分支名 ### 分支选择优先级 当多个分支匹配时,脚本会按以下优先级选择: 1. `main` 分支 2. `master` 分支 3. 第一个匹配的分支 ## 部署流程 1. **获取分支列表**: 从远程仓库获取所有可用分支 2. **分支匹配**: 根据提供的模式查找匹配的分支 3. **代码拉取**: 克隆或更新指定分支的代码 4. **依赖安装**: 执行 `pnpm install` 安装项目依赖 5. **项目构建**: 执行 `pnpm build` 构建项目 6. **文件压缩**: 将 `dist` 目录压缩为 zip 文件 7. **服务器连接**: 通过 SSH 连接到远程服务器 8. **版本备份**: 备份当前服务器上的版本 9. **文件上传**: 上传压缩包到服务器 10. **部署执行**: 解压并部署新版本 11. **清理工作**: 清理临时文件 ## 错误处理 - 如果部署过程中出现错误,脚本会自动尝试回滚到上一个版本 - 所有操作都有详细的日志输出 - 支持优雅的错误处理和资源清理 - 分支匹配失败时会显示可用的分支列表 ## 依赖项 - `paramiko`: SSH 连接和文件传输 - `python-dotenv`: 环境变量管理 - `requests`: HTTP 请求(备用) ## 系统要求 - Python 3.11+ - Git 命令行工具 - pnpm 包管理器 - 目标项目需要支持 `pnpm install` 和 `pnpm build` 命令 - 服务器需要支持 SSH 连接和 zip/unzip 命令 ## 注意事项 - 确保服务器上的目标路径有足够的权限 - 建议使用 SSH 密钥认证而不是密码认证(更安全) - 定期检查备份文件,避免占用过多磁盘空间 - 在生产环境中使用前,建议先在测试环境验证 - 脚本会在当前目录创建 `temp_deploy` 文件夹存放临时文件 ## 故障排除 ### 常见问题 1. **Git 仓库访问失败** - 检查 Git 仓库地址是否正确 - 确认有访问仓库的权限 - 检查网络连接 2. **分支匹配失败** - 检查分支模式是否正确 - 确认仓库中存在匹配的分支 - 查看脚本输出的可用分支列表 3. **SSH 连接失败** - 检查服务器地址、端口、用户名和密码 - 确认服务器 SSH 服务正在运行 4. **依赖安装失败** - 确认项目支持 `pnpm install` 命令 - 检查网络连接和 npm 仓库访问 - 确认 pnpm 已正确安装 5. **构建失败** - 确认项目支持 `pnpm build` 命令 - 检查项目依赖是否正确安装 - 确认所有依赖都已成功安装 6. **权限错误** - 确认远程路径的写入权限 - 检查用户是否有执行 zip/unzip 的权限 ### 日志级别 脚本使用 Python 的 logging 模块,可以通过修改日志级别来获取更详细的信息: ```python logging.basicConfig(level=logging.DEBUG) ``` ## 许可证 MIT License