233 lines
6.8 KiB
Markdown
233 lines
6.8 KiB
Markdown
# Installer Builder 架构设计
|
||
|
||
## 1. 系统概述
|
||
|
||
Installer Builder 是一个跨平台的安装包构建工具,旨在简化为不同操作系统和架构创建安装包的过程。该系统支持 Windows 和 Linux 平台,能够生成多种类型的安装包(MSI、DEB、RPM 和压缩包),并支持多架构构建、安装前后脚本执行以及安装包升级。
|
||
|
||
### 1.1 设计目标
|
||
|
||
- **跨平台**:支持 Windows 和 Linux 操作系统
|
||
- **多格式**:支持 MSI、DEB、RPM 和压缩包格式
|
||
- **多架构**:支持为不同 CPU 架构构建安装包
|
||
- **可配置**:通过配置文件定义安装包内容和行为
|
||
- **可扩展**:通过插件系统支持自定义功能
|
||
- **双模式**:同时支持命令行和图形界面
|
||
|
||
## 2. 系统架构
|
||
|
||
### 2.1 整体架构
|
||
|
||
Installer Builder 采用分层架构设计,主要包括以下层次:
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[用户界面层] --> B[核心引擎层]
|
||
B --> C[平台适配层]
|
||
C --> D[包构建层]
|
||
E[插件系统] --> D
|
||
B --> F[脚本执行层]
|
||
```
|
||
|
||
### 2.2 核心组件
|
||
|
||
#### 2.2.1 用户界面层
|
||
|
||
提供与用户交互的接口,包括命令行界面(CLI)和图形用户界面(GUI)。
|
||
|
||
- **CLI**:用于自动化构建流程,适合集成到 CI/CD 管道中
|
||
- **GUI**:基于 Wails 框架,为开发人员提供直观的操作界面
|
||
|
||
#### 2.2.2 核心引擎层
|
||
|
||
系统的中央协调组件,负责管理整个构建流程。
|
||
|
||
- **配置管理器**:解析和验证配置文件
|
||
- **构建协调器**:协调各组件完成构建任务
|
||
- **资源管理器**:管理构建过程中的临时资源
|
||
- **任务调度器**:处理并行构建任务
|
||
|
||
#### 2.2.3 平台适配层
|
||
|
||
处理不同操作系统和架构的特定逻辑。
|
||
|
||
- **平台检测器**:检测当前运行平台
|
||
- **平台适配器**:为不同平台提供特定实现
|
||
- **架构管理器**:处理多架构构建需求
|
||
|
||
#### 2.2.4 包构建层
|
||
|
||
负责生成不同类型的安装包。
|
||
|
||
- **MSI 构建器**:构建 Windows MSI 安装包
|
||
- **DEB 构建器**:构建 Linux DEB 安装包
|
||
- **RPM 构建器**:构建 Linux RPM 安装包
|
||
- **压缩包构建器**:创建跨平台压缩包
|
||
|
||
#### 2.2.5 脚本执行层
|
||
|
||
处理安装前后脚本的执行。
|
||
|
||
- **脚本执行器**:执行 Node.js 脚本
|
||
- **环境变量管理器**:管理脚本执行环境
|
||
- **结果处理器**:处理脚本执行结果
|
||
|
||
#### 2.2.6 插件系统
|
||
|
||
提供扩展系统功能的机制。
|
||
|
||
- **插件管理器**:加载和管理插件
|
||
- **插件接口**:定义插件与系统交互的标准接口
|
||
|
||
## 3. 数据流
|
||
|
||
### 3.1 构建流程数据流
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant User
|
||
participant UI as 用户界面
|
||
participant Config as 配置管理器
|
||
participant Builder as 构建协调器
|
||
participant Platform as 平台适配器
|
||
participant Packager as 包构建器
|
||
participant Script as 脚本执行器
|
||
|
||
User->>UI: 提供配置文件和构建参数
|
||
UI->>Config: 解析配置
|
||
Config->>Builder: 提供验证后的配置
|
||
Builder->>Platform: 请求平台适配
|
||
Platform->>Builder: 返回平台特定信息
|
||
Builder->>Script: 执行安装前脚本(如有)
|
||
Script->>Builder: 返回脚本执行结果
|
||
Builder->>Packager: 请求构建安装包
|
||
Packager->>Builder: 返回构建结果
|
||
Builder->>Script: 执行安装后脚本(如有)
|
||
Script->>Builder: 返回脚本执行结果
|
||
Builder->>UI: 返回构建结果
|
||
UI->>User: 显示结果
|
||
```
|
||
|
||
### 3.2 配置数据流
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[配置文件] --> B[配置解析器]
|
||
B --> C{格式验证}
|
||
C -->|验证失败| D[错误处理]
|
||
C -->|验证成功| E[配置模型]
|
||
E --> F[构建协调器]
|
||
```
|
||
|
||
## 4. 技术栈选择
|
||
|
||
### 4.1 核心语言:Go
|
||
|
||
选择 Go 作为核心开发语言的理由:
|
||
|
||
- **跨平台**:原生支持 Windows 和 Linux
|
||
- **编译型语言**:生成单一二进制文件,无需运行时依赖
|
||
- **并发支持**:优秀的并发模型,适合处理并行构建任务
|
||
- **性能**:高性能,适合处理文件操作和系统调用
|
||
- **标准库**:丰富的标准库,特别是用于文件操作和压缩
|
||
|
||
### 4.2 图形界面:Wails
|
||
|
||
选择 Wails 作为 GUI 框架的理由:
|
||
|
||
- **Go + Web 技术**:结合 Go 后端和现代 Web 前端技术
|
||
- **原生感觉**:生成的应用具有原生应用的外观和感觉
|
||
- **跨平台**:支持 Windows 和 Linux
|
||
- **轻量级**:比 Electron 更轻量,资源占用更少
|
||
- **开发体验**:允许使用熟悉的 Web 技术进行 UI 开发
|
||
|
||
### 4.3 配置格式:YAML/JSON
|
||
|
||
同时支持 YAML 和 JSON 配置格式的理由:
|
||
|
||
- **人类可读性**:YAML 格式易于人类阅读和编写
|
||
- **广泛支持**:JSON 格式被广泛支持,易于与其他工具集成
|
||
- **灵活性**:提供多种选择以满足不同用户的偏好
|
||
- **验证支持**:可以使用 JSON Schema 进行配置验证
|
||
|
||
### 4.4 脚本执行:Node.js
|
||
|
||
选择 Node.js 作为脚本执行环境的理由:
|
||
|
||
- **跨平台**:在 Windows 和 Linux 上表现一致
|
||
- **生态系统**:丰富的包生态系统
|
||
- **异步 I/O**:适合执行 I/O 密集型任务
|
||
- **熟悉度**:开发人员普遍熟悉 JavaScript/Node.js
|
||
|
||
## 5. 扩展性设计
|
||
|
||
### 5.1 插件系统
|
||
|
||
Installer Builder 采用插件架构,允许通过插件扩展系统功能:
|
||
|
||
- **包类型插件**:添加对新安装包类型的支持
|
||
- **平台插件**:添加对新操作系统的支持
|
||
- **功能插件**:添加新功能,如签名、验证等
|
||
|
||
### 5.2 接口设计
|
||
|
||
系统使用清晰定义的接口,使组件之间松耦合:
|
||
|
||
- **包构建器接口**:统一不同包类型的构建过程
|
||
- **平台适配器接口**:统一不同平台的特定操作
|
||
- **脚本执行器接口**:允许支持不同的脚本语言
|
||
|
||
## 6. 部署架构
|
||
|
||
Installer Builder 作为独立应用程序部署,有两种使用模式:
|
||
|
||
### 6.1 开发者模式
|
||
|
||
- 开发人员在本地安装并使用 GUI 模式
|
||
- 用于测试和调试安装包配置
|
||
|
||
### 6.2 CI/CD 模式
|
||
|
||
- 在 CI/CD 管道中使用 CLI 模式
|
||
- 自动化构建和发布安装包
|
||
|
||
## 7. 安全考虑
|
||
|
||
### 7.1 脚本执行安全
|
||
|
||
- 在受控环境中执行脚本
|
||
- 限制脚本的系统访问权限
|
||
- 验证脚本来源
|
||
|
||
### 7.2 配置验证
|
||
|
||
- 严格验证配置文件内容
|
||
- 防止恶意配置导致的安全问题
|
||
|
||
### 7.3 依赖管理
|
||
|
||
- 定期更新依赖以修复安全漏洞
|
||
- 使用可信来源的依赖
|
||
|
||
## 8. 性能考虑
|
||
|
||
### 8.1 并行构建
|
||
|
||
- 支持并行构建多个架构和包类型
|
||
- 使用 Go 的并发特性优化性能
|
||
|
||
### 8.2 资源管理
|
||
|
||
- 有效管理内存和磁盘使用
|
||
- 清理临时文件和资源
|
||
|
||
## 9. 兼容性和可移植性
|
||
|
||
### 9.1 跨平台兼容性
|
||
|
||
- 确保在 Windows 和 Linux 上一致的行为
|
||
- 处理平台特定的文件路径和权限差异
|
||
|
||
### 9.2 向后兼容性
|
||
|
||
- 维护配置文件格式的向后兼容性
|
||
- 支持旧版本创建的安装包的升级路径 |