2. 制品管理基础:什么是制品(Artifact)、制品仓库(如 Nexus, Artifactory)的核心概念

2.1 制品(Artifact)的定义与生命周期

在 DevOps 与 CI/CD 流水线中,制品(Artifact) 是指软件开发过程中产生的、可交付或可部署的产物。它通常是构建阶段输出的二进制文件、压缩包或容器镜像,是“源代码”到“运行环境”之间的关键中间态。

核心定义: 制品是经过编译、打包、测试验证后,具备版本标识且可直接部署到目标环境的不可变产物。

典型的制品类型包括:

  • 编译产物: JAR、WAR、EAR(Java 生态);DLL、EXE(.NET 生态);.whl(Python 包);.gem(Ruby 包)。
  • 镜像与容器: Docker 镜像、OCI 镜像、Helm Chart 包。
  • 安装包: .deb、.rpm、.msi、.pkg。
  • 配置文件与脚本: 经过参数化处理的 YAML、JSON、Shell 脚本归档。

制品的生命周期通常包含以下阶段:

阶段 说明 关键动作
构建 从源代码编译、打包生成原始制品 Maven package、npm run build
存储 上传至制品仓库,保留版本与元数据 mvn deploy、docker push
验证 安全扫描、签名校验、质量门禁 Trivy 扫描、GPG 签名
部署 从仓库拉取指定版本到目标环境 kubectl apply、ansible-playbook
归档/清理 按策略保留或删除旧版本制品 保留最近 N 个版本、按日期清理
版本冻结的关键前提: 只有将制品视为“不可变对象”,并为其分配唯一版本号(如 v1.2.3+build.20250401),才能实现精确的回滚与冻结。任何对已发布制品的修改都应生成新版本,而非覆盖旧版本。

2.2 制品仓库(Artifact Repository)的核心概念

制品仓库是集中存储、管理、分发制品的平台。它解决了“制品散落在各构建节点”、“版本混乱”、“依赖不可追溯”等痛点。常见的商业与开源方案包括 Sonatype Nexus、JFrog Artifactory、Harbor(容器镜像)、AWS CodeArtifact 等。

制品仓库的核心能力可归纳为以下四个维度:

  1. 代理与缓存(Proxy & Cache): 代理外部公共仓库(如 Maven Central、Docker Hub),将下载过的依赖缓存到本地,加速构建并减少外网依赖。
  2. 托管与版本管理(Hosted & Versioning): 存储组织内部构建的私有制品,支持语义化版本、时间戳版本、快照版本,并提供保留策略。
  3. 分组与虚拟仓库(Group & Virtual Repository): 将多个代理仓库和托管仓库聚合成一个统一入口,简化客户端配置。例如:将所有 Maven 仓库聚合为一个 maven-all 地址。
  4. 安全与审计(Security & Audit): 支持 RBAC 权限控制、制品签名校验、恶意依赖扫描、操作审计日志。

2.3 制品仓库架构示意图

下图展示了一个典型的制品仓库内部结构,以及它与 CI/CD 流水线、外部公共仓库的关系:

制品仓库核心架构图 制品仓库核心架构(以 Nexus / Artifactory 为例) 外部公共仓库 Maven Central Docker Hub PyPI / npm 代理仓库 Proxy Repo 缓存 + 透传 托管仓库 Hosted Repo 私有制品存储 虚拟仓库 Group Repo 统一入口 CI/CD 流水线 Jenkins / GitLab CI GitHub Actions 拉取依赖 上传制品 目标环境 K8s / 虚拟机 物理服务器 部署拉取 说明:虚拟仓库作为统一入口,屏蔽底层代理/托管仓库的差异;CI/CD 流水线只与虚拟仓库交互。

2.4 Nexus 与 Artifactory 核心对比

下表从关键维度对比两款主流制品仓库,帮助团队根据自身场景选型:

对比维度 Sonatype Nexus JFrog Artifactory
许可证 OSS 版免费(功能受限),Pro 版付费 OSS 版免费(功能较少),Pro/Enterprise 付费
包类型支持 Maven、npm、Docker、PyPI、NuGet 等 30+ Maven、npm、Docker、PyPI、Go、Helm 等 40+
高可用架构 Pro 版支持集群部署 Enterprise 版支持多活集群
制品扫描 需集成第三方工具(如 SonarQube) 内置 Xray 深度扫描(依赖分析+漏洞)
虚拟仓库 支持(Group Repository) 支持(Virtual Repository)
清理策略 基于时间/版本数的自动清理 基于时间/版本数/使用频率的智能清理
REST API 完整,但部分操作需 Pro 完整,支持脚本化批量操作
选型建议: 如果团队以 Java/Maven 生态为主且预算有限,Nexus OSS 是成熟选择;如果涉及多语言、容器镜像、Helm Chart 且需要深度安全扫描,Artifactory Pro/Enterprise 的综合能力更强。无论选择哪款,版本冻结策略 都需要依赖仓库的“不可变制品”特性——即制品一旦发布,其内容与版本号均不可修改。

2.5 制品仓库在版本冻结中的关键角色

在后续章节的“版本冻结策略”中,制品仓库将承担以下核心职责:

  • 版本锁定: 通过仓库的 release 类型仓库,确保冻结版本不会被覆盖或删除。
  • 快照隔离: 将开发中的 SNAPSHOT 版本与正式 Release 版本物理隔离,防止误用。
  • 回滚溯源: 仓库保留每个版本的构建时间、构建编号、Git Commit SHA、构建参数等元数据,为回滚提供精确的“版本快照”。
  • 清理策略配合: 冻结的版本应被排除在自动清理规则之外,避免因清理导致回滚目标丢失。
实践要点: 在制品仓库中为每个项目创建独立的 releases 和 snapshots 仓库,并设置 Deployment Policy 为 “Disable Redeploy”(禁止重新部署),这是实现版本冻结的第一道防线。