2. Nexus 仓库类型与结构:Hosted、Proxy、Group 仓库的区别,以及仓库在晋级流程中的层级划分
在构建企业级制品晋级审批流之前,必须深刻理解 Nexus 的三种核心仓库类型及其在制品流转中的角色。这三种类型——Hosted(托管仓库)、Proxy(代理仓库)和Group(组合仓库)——构成了 Nexus 仓库管理的基石,也是设计制品晋级路径的物理载体。
2.1 三种仓库类型的核心定义与对比
下表从功能定位、数据来源、使用场景三个维度,对三种仓库类型进行精确对比:
| 仓库类型 | 功能定位 | 数据来源 | 典型使用场景 |
|---|---|---|---|
| Hosted(托管仓库) | 内部制品的存储与发布中心 | 由开发人员或 CI/CD 工具手动上传(deploy) | 存放内部构建产物、第三方商业库、制品晋级后的稳定版本 |
| Proxy(代理仓库) | 外部远程仓库的本地缓存代理 | 从远程中央仓库(如 Maven Central、npmjs.org)自动下载并缓存 | 加速外部依赖下载、隔离外部网络、统一管理外部制品版本 |
| Group(组合仓库) | 多个仓库的逻辑聚合与统一访问入口 | 聚合 Hosted 和 Proxy 仓库的内容,对外提供单一 URL | 为开发团队提供统一的制品消费视图,简化客户端配置 |
关键认知:在制品晋级流程中,Hosted 仓库是“晋级目标”和“存储载体”;Proxy 仓库是“外部依赖源”,不参与内部晋级;Group 仓库是“消费入口”,通常指向当前可用的最新稳定制品集合。
2.2 仓库在晋级流程中的层级划分
企业级制品晋级流程通常遵循“从开发到生产”的严格路径。基于 Nexus 仓库类型,我们设计出以下四层晋级模型,每一层对应一个独立的 Hosted 仓库:
- 开发层(Development):存放每日构建的 Snapshot 或开发分支制品,允许频繁覆盖,生命周期短。
- 测试层(Testing):存放通过单元测试和集成测试的候选版本,供 QA 团队验证。
- 预发布层(Staging):存放通过 QA 验证的 Release 候选版,进行 UAT 或性能测试,此阶段制品不可变。
- 生产层(Production):存放经过完整审批、可部署到生产环境的正式 Release 版本,只读且长期保留。
以下 SVG 图展示了基于 Hosted 仓库的制品晋级层级结构:
2.3 Proxy 仓库在晋级流程中的角色
Proxy 仓库虽然不直接参与制品晋级,但它是企业级制品管理不可或缺的一环。其核心职责包括:
- 外部依赖缓存:当开发人员构建项目时,所需的第三方依赖(如 Spring Framework、lodash)通过 Proxy 仓库从远程中央仓库下载并缓存到本地 Nexus。
- 版本锁定与安全扫描:Proxy 仓库可以配置为只缓存特定版本范围的制品,并集成漏洞扫描工具,确保进入内部环境的依赖是安全的。
- 网络隔离:在离线或受限网络环境中,Proxy 仓库作为唯一的外部依赖入口,简化了防火墙策略。
最佳实践:在晋级流程中,Proxy 仓库通常与生产层 Hosted 仓库一起被聚合到同一个 Group 仓库中。这样,开发人员只需配置一个 Group 仓库地址,即可同时获取内部正式制品和外部依赖。
2.4 Group 仓库:统一消费视图的设计
Group 仓库是 Nexus 中最高层级的抽象,它通过“成员仓库列表”将多个 Hosted 和 Proxy 仓库组合成一个逻辑仓库。在制品晋级流程中,Group 仓库的设计遵循以下原则:
| 设计原则 | 说明 | 示例 |
|---|---|---|
| 成员顺序 | Group 仓库按成员列表顺序查找制品,优先返回第一个匹配的仓库中的制品 | group-release 成员顺序:hosted-prod → proxy-central |
| 只读性 | Group 仓库本身是只读的,制品只能通过其成员仓库(Hosted)进行发布 | 开发人员不能直接 deploy 到 group-release |
| 层级隔离 | 不同环境使用不同的 Group 仓库,避免开发人员误用生产级制品 | group-dev 聚合 hosted-dev + proxy-central;group-prod 聚合 hosted-prod + proxy-central |
以下 SVG 图展示了 Group 仓库如何聚合不同层级的 Hosted 仓库和 Proxy 仓库,形成面向不同环境的统一消费入口:
2.5 仓库类型与晋级流程的映射关系
在制品晋级审批流中,三种仓库类型各司其职,形成清晰的职责边界:
- Hosted 仓库:作为晋级流程的“物理存储节点”,每个晋级阶段(开发→测试→预发布→生产)对应一个独立的 Hosted 仓库。制品通过审批后,从当前 Hosted 仓库复制或移动到下一级 Hosted 仓库。
- Proxy 仓库:作为“外部依赖源”,不参与晋级流程,但为所有阶段的构建提供一致的第三方依赖版本。
- Group 仓库:作为“消费视图”,为不同环境的开发团队提供统一的制品访问入口。Group 仓库的成员列表决定了该环境能消费哪些阶段的制品。
常见误区:不要将 Group 仓库作为晋级目标。Group 仓库是只读的,制品必须通过 Hosted 仓库进行发布和晋级。试图直接向 Group 仓库 deploy 制品会导致操作失败。