概述
启用差异构建
工作方式
1. 查找父构建
success 或 partial) ,并将其作为父构建使用。如果没有符合条件的父构建,系统会自动退回到完整构建。
2. 比较蓝图
3. 分配工作区操作
| 操作 | 执行结果 | 使用时机 |
|---|---|---|
| 重建 | 克隆代码仓库,并从头运行所有蓝图步骤 (initialize + maintenance) | 自父构建以来,蓝图已发生变化 |
| 继承 | 拉取最新代码,并仅运行 maintenance 步骤 | 蓝图未发生变化——复用父构建的环境设置 |
| 移除 | 从快照中删除该工作区 | 该工作区已从配置中移除 |
对于继承的工作区,
initialize 不会再次运行。请编写 maintenance,
确保它是自包含的,并且能在拉取最新代码后独立运行。
它可以使用父快照中已安装的工具和运行时,
但不得要求必须先立即运行 initialize,也不得依赖
initialize 先前写入 $ENVRC 的环境变量。4. 执行构建
- 继承的工作区 已预先安装好所需的工具、运行时和依赖。系统会拉取最新代码 (
git pull) ,并运行maintenance命令来更新依赖。 - 重新构建的工作区 会从头开始设置——重新克隆,并完整执行
initialize+maintenance流程。 - 已移除的工作区 的目录会被清理。
initialize (因为这些工具已存在于父镜像中) ,只运行 maintenance。
每次构建开始时,都会重置
$ENVRC,包括差异构建。
此前构建写入 $ENVRC 的环境变量和 PATH 条目
不会被继承。如果 maintenance 需要这些内容,则必须自行
进行配置。何时会改为执行完整构建
- 不存在父构建 — 首次构建,或者之前所有构建都失败了
- 组织或企业蓝图已更改 — 全局更改会影响所有工作区,因此执行一次彻底重建更稳妥
- 代码仓库顺序已更改 — 由于代码仓库的设置可能彼此依赖,重新排序会触发一次完整重建
- 父构建过旧或不兼容 — 系统会验证父构建是否可用
查看构建类型
- 前往 设置 > 环境 > 快照
- 点击历史记录中的某个构建
- Build kind 标记会显示 Differential (蓝色) 或 完整构建 (默认)
- Differential: “仅重新构建已更改的工作区;未更改的工作区将沿用上一次使用相同配置成功构建的结果”
- 完整构建: “所有工作区都会从头开始构建”
优势
| 优势 | 描述 |
|---|---|
| 构建更快 | 只有发生变更的工作区才需要经过完整的设置流程。继承的工作区会完全跳过 initialize。 |
| 网络用量更少 | 未发生变更的工作区不会重新下载工具、运行时或大型依赖。 |
| 迭代更快 | 当你迭代单个代码仓库的蓝图时,其他代码仓库不会拖慢构建速度。 |
| 可靠性不变 | 如果发现任何异常,系统会自动回退到完整构建。你也可以随时手动触发完整构建。 |
手动触发完整构建
initialize 和 maintenance 步骤。
常见问题
启用差异构建会影响我的会话吗?
启用差异构建会影响我的会话吗?
不会。无论快照是如何构建的,会话始终都会从最终快照启动。唯一的区别只是构建速度。
如果差异构建生成了有问题的快照怎么办?
如果差异构建生成了有问题的快照怎么办?
在 设置 > 环境 > 快照 中固定一个先前已知正常的构建,然后触发一次完整构建,以获得干净的快照。你也可以完全禁用差异构建,改回使用完整构建。
部分构建可以作为父构建吗?
部分构建可以作为父构建吗?
可以。状态为
partial 的构建 (某些工作区成功,某些失败) 可以作为父构建。系统只会继承父构建中成功的工作区内容。
