Skip to content

镜像与制品仓库

仓库负责保存、分发和治理不可变制品。容器镜像使用 OCI Registry;npm 包、Maven 包和通用压缩包可使用平台内置仓库、Nexus 或 Artifactory。

生产策略

  • 按团队或系统划分项目,写权限只授予流水线和少数维护者。
  • 禁止覆盖发布标签,生产以 digest 部署。(SHA-256 摘要作为标签)
  • 为临时分支、开发版本和正式版本设置不同保留期。
  • 推送后生成或关联 SBOM,执行漏洞扫描并保留结果。
  • 对生产制品执行签名,在部署准入阶段验证来源。
  • 启用审计日志、垃圾回收、备份和跨区域复制。

SBOM(Software Bill of Materials,软件物料清单)

类似镜像的“配料表”,记录操作系统包、npm 包、版本、许可证等。例如包含 openssl 3.x、lodash 4.17.21。

text
SBOM:包含 openssl 3.0.10、node 22.x、express 5.x……
扫描结果:严重漏洞 0,高危漏洞 0,中危漏洞 3

非容器制品仓库

非容器制品仓库用于集中代理、保存和分发 npm、Maven、PyPI、NuGet 包以及压缩包等通用构建产物。它既可以缓存公共源,也可以托管组织内部发布的私有制品。

仓库类型

  • 代理仓库:代理 npm、Maven Central、PyPI 等外部源,并缓存下载过的制品。
  • 托管仓库:保存团队自行构建和发布的私有制品。
  • 仓库组或虚拟仓库:把多个代理仓库和托管仓库组合成一个访问地址。

引入前需要明确

  • 缓存:需要代理哪些外部源,断网时是否仍需使用已经缓存的依赖。
  • 许可证:产品功能和用户规模是否需要商业许可证,依赖许可证是否需要审计。
  • 权限:谁可以读取、发布、删除和提升制品,流水线使用什么身份访问。
  • 保留:快照、开发版本和正式版本分别保留多久,哪些版本禁止覆盖或删除。
  • 灾备:元数据、二进制文件和配置如何备份,恢复目标和异地复制要求是什么。

生产建议

  • 正式版本使用唯一、不可覆盖的版本号,避免使用 latest 或重复发布同一版本。
  • 构建只从受控仓库下载依赖,减少上游源变化和供应链攻击带来的风险。
  • 为发布操作保留审计记录,并将制品与来源 Commit、流水线和扫描结果关联。
  • 定期验证备份可以恢复,同时清理过期快照和无引用制品。

Nexus Repository 和 JFrog Artifactory 都能覆盖常见的制品代理与托管需求。选型时应以实际包格式、权限模型、高可用、复制、扫描和维护成本为依据,不必只为统一工具而迁移已有的稳定仓库。

Powered by VitePress