DevOps服务是火石平台的持续集成与持续部署系统。
DevOps服务提供以下功能:
- 项目管理
- 迭代管理
- 构建部署
- 发布管理
- 第三方小程序管理
- 框架: NestJS
- 数据库: MongoDB
- CI/CD工具: Jenkins
- 容器化: Docker
- 自动化优先: 所有重复任务实现自动化
- 可追溯性: 所有操作记录完整日志
- 可扩展性: 支持多种项目类型和部署环境
- 可靠性: 确保构建和部署过程稳定可靠
DevOps系统使用MongoDB数据库,主要包含以下集合结构:
// 项目集合
{
_id: ObjectId("..."),
zhName: "项目中文名",
usName: "project-english-name",
desc: "项目描述",
projectTypes: ["web", "mobile"],
gitProjectId: 12345,
gitNamespace: "team-name",
gitProjectUrl: "https://git.example.com/team-name/project-name",
gitProjectName: "project-name",
gitProjectDesc: "Git项目描述",
creatorName: "创建者",
creatorId: 10001,
createTime: ISODate("2023-01-01T00:00:00Z"),
status: 1
}// 迭代集合
{
_id: ObjectId("..."),
projectId: ObjectId("..."),
name: "v1.0.0",
desc: "第一个版本",
creatorId: 10001,
creatorName: "创建者",
branchName: "release/v1.0.0",
createTime: ISODate("2023-01-15T00:00:00Z"),
endTime: ISODate("2023-02-15T00:00:00Z"),
status: 1
}// 部署任务集合
{
_id: ObjectId("..."),
projectId: ObjectId("..."),
iterationId: ObjectId("..."),
processId: "process123",
branch: "release/v1.0.0",
env: "test",
projectType: "web",
status: 2,
creatorName: "部署者",
creatorId: 10001,
startTime: ISODate("2023-01-20T10:00:00Z"),
endTime: ISODate("2023-01-20T10:05:00Z"),
queueId: 45678,
buildId: 98765,
desc: "测试环境部署"
}// 操作记录集合
{
_id: ObjectId("..."),
operationType: 1,
record: {
projectId: ObjectId("..."),
iterationId: ObjectId("...")
},
operationTime: ISODate("2023-01-20T10:00:00Z"),
operatorId: 10001,
operatorName: "操作者"
}- 项目模块: 管理项目信息和配置
- 迭代模块: 管理项目迭代和版本
- 分支模块: 管理Git分支
- 部署模块: 执行构建和部署任务
- 系统模块: 管理系统配置和操作记录
DevOps服务提供RESTful API,主要包括:
GET /api/projects: 获取项目列表POST /api/projects: 创建新项目GET /api/projects/:id: 获取项目详情PUT /api/projects/:id: 更新项目信息GET /api/projects/:id/iterations: 获取项目迭代列表POST /api/iterations: 创建新迭代POST /api/tasks: 创建部署任务GET /api/tasks: 获取任务列表
- 接收部署请求
- 验证参数和权限
- 创建Jenkins任务
- 监控任务执行状态
- 记录部署结果
- 通知用户部署结果
DevOps服务支持多种项目类型的扩展:
- Web前端项目
- 服务端项目
- 移动应用(iOS/Android)
- 小程序
- React Native应用
DevOps服务已完成从MySQL到MongoDB的迁移,采用以下策略:
- 创建与MongoDB兼容的实体类(.mongo.entity.ts)
- 使用MongoDB的查询语法替代MySQL语法
- 将Repository替换为MongoRepository
- 将主键从自增ID替换为ObjectId
- 调整关系表示方式,使用引用或嵌入文档
MongoDB的优势包括:
- 文档模型与对象模型更自然匹配
- 灵活的schema支持快速迭代
- 高性能的读写操作
- 易于横向扩展