Files
foka-ci/docs/architecture/design-0005-refactor-deply.md
2026-01-08 19:50:58 +08:00

131 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 设计文档 0005 - 部署流程重构(移除稀疏检出 & 环境预设)
summary: 调整部署相关能力:移除稀疏检出;将部署环境从创建时输入改为在项目设置中预设。
owners:
- team: backend
reviewers:
- team: frontend
status: draft
date: 2026-01-03
version: 0.1.0
related:
- docs: docs/api/endpoints.md
- schema: apps/server/prisma/schema.prisma
---
# 设计文档 0005部署流程重构移除稀疏检出 & 环境预设)
## 1. 背景Context
当前部署流程在“项目详情页发起部署”时包含“稀疏检出sparse checkout”表单项并且流水线模板中也包含与稀疏检出相关的逻辑。
另外,部署时需要指定环境变量(例如 env但目前是在“创建部署”时临时输入/选择。随着项目数量增加,这种方式容易造成不一致与误操作。
## 2. 目标Goals
- [ ] 移除项目详情页部署表单中的“稀疏检出”相关输入项
- [ ] 移除流水线模板中与稀疏检出相关的代码逻辑(后端模板/生成逻辑)
- [ ] 将“部署环境env”从创建部署时指定调整为在“项目设置”中提前预设
- [ ] 创建部署时仍需要选择/指定环境,但选项来源于项目设置中的预设项
## 3. 非目标Non-goals
- 不新增多维度环境变量管理(仅覆盖本次提到的 env 单项预设)
- 不在本次引入复杂的环境权限、审批流
## 4. 需求与范围Requirements & Scope
### 4.1 移除稀疏检出
#### 用户侧
- 项目详情页发起部署时:不再展示/提交稀疏检出字段
#### 系统侧
- 流水线模板:移除任何基于稀疏检出路径的生成/执行逻辑
> 说明:当前 DB 中 Deployment 仍存在 `sparseCheckoutPaths` 字段(见 `schema.prisma`),本次需求仅明确“功能不再需要”。字段是否删除/迁移由本设计后续章节确定。
### 4.2 部署环境 env 改为项目设置预设
#### 核心约束
- 环境变量预设需要支持多选、单选、输入框这几种类型
- 在项目设置中新增可配置项(预设项):
例如指定env 环境变量
- 类型单选single select
- key`env`value 及时部署是选中的候选项的值
- options`staging`(测试环境)、`production`(生产环境)
#### 行为
- 创建部署时仍需指定环境env
- 不再由用户自由输入
- 只允许从该项目预设的 options 中选择
## 5. 影响面Impact
### 5.1 前端
- 项目详情页部署表单:移除“稀疏检出”相关 UI 与字段提交
- 项目设置页新增“环境预设env”配置入口单选 + 选项 staging/production
- 创建部署交互:环境选项从项目设置读取(不再硬编码/临时输入)
### 5.2 后端
- 部署创建接口:校验 env 必须来自项目预设(避免非法 env
- 流水线模板:移除稀疏检出相关的模板字段/生成逻辑
### 5.3 数据库
- 需要新增“项目设置/项目配置”承载 env 预设(落库方案待定)
- 既有 Deployment 的 `sparseCheckoutPaths` 字段:后续决定是否保留(兼容历史)或迁移删除
## 6. 兼容性与迁移Compatibility & Migration
- 对历史部署记录:
- 若存在 `sparseCheckoutPaths`,不影响查询展示,但新建部署不再写入该字段
- 对创建部署:
- 若项目未配置 env 预设:创建部署应失败并提示先到项目设置配置(或提供默认值策略,待确认)
## 7. 测试要点Test Plan
- 前端:
- 项目详情页部署表单不再出现稀疏检出项
- 项目设置可保存 env 预设(单选)并在创建部署时正确展示
- 后端:
- 创建部署env 不在项目预设 options 内时应拒绝
- 流水线模板:移除稀疏检出后仍能正常创建并执行
## 8. 实施状态Implementation Status
### 已完成(后端)
- [x] Prisma Schema在 Project 表添加 `envPresets` 字段String? 类型,存储 JSON
- [x] 移除部署创建/重试接口中的 `sparseCheckoutPaths` 写入
- [x] 在部署创建接口添加环境校验:验证 env 是否在项目 envPresets 的 options 中
- [x] 更新 project DTO 和 controller 支持 envPresets 读写
- [x] 移除 pipeline-runner 中的 `SPARSE_CHECKOUT_PATHS` 环境变量
- [x] 生成 Prisma Client
- [x] 移除项目详情接口中的目录大小计算(保留工作目录状态其他信息)
### 已完成(前端)
- [x] 创建 EnvPresetsEditor 组件(支持单选、多选、输入框类型)
- [x] 在 CreateProjectModal 和 EditProjectModal 中集成环境预设编辑器
- [x] 从 DeployModal 移除稀疏检出表单项
- [x] 在 DeployModal 中从项目 envPresets 读取环境选项并展示
- [x] 移除 DeployModal 中的动态环境变量列表envVars Form.List
- [x] 从类型定义中移除 sparseCheckoutPaths 字段
- [x] 在项目详情页项目设置 tab 中添加环境变量预设的查看和编辑功能
- [x] 移除创建项目时增加环境变量预设的功能,因为编辑环境变量预设的功能放到了项目编详细页面
- [x] 移除项目详情页项目设置 tab 中的目录大小显示(保留工作目录状态、当前分支、最后提交等信息)
### 待定问题
- Q1项目设置存储方式 → **已决定**:使用 Project.envPresets JSON 字段
- Q2未配置 env 预设的默认行为 → **已实现**:若配置了预设则校验,否则允许任意值(向后兼容)
- Q3Deployment.sparseCheckoutPaths 字段 → **已决定**:保留字段(兼容历史),但新建部署不再写入