存储派生信息的存储库(构建工件)

Repository for storing derived information (build artifacts)

我正在寻找 "repository" 来存储派生信息(构建工件)。 我们有一个存储库(目前是 Mercurial)来存储我们的源代码。当某些东西被推送到源存储库时,代码会通过一个持续集成服务器,我们会进行增量构建,因此一些 dll 将被更改。这应该添加到一些 "repository" 以便每个人都可以使用该版本而无需再次构建。 我正在寻找以下功能:

什么符合这些要求?

您基本上是在要求像 Nexus Repository Manager 这样的存储库管理器,因为您已经正确识别了标签。

关于您的问题的具体要求,这里有一些想法。

  • 二进制组件通常通过一些坐标来标识,这些坐标大多数时候包括某种名称和版本。发布和构建过程更改这些并将它们部署到存储库。这允许您将源代码与二进制文件相匹配。您还可以在生成的二进制文件中嵌入 git refs 等信息。

  • 访问二进制文件通常是通过 HTTP 完成的,因此很容易。然后你只需要确定得到 "all binaries".

  • 意味着什么
  • 底层文件系统或构建工具可以支持不复制本质上相同的二进制文件。我已经看到这两个过程都有效。然而,通常不值得付出努力,因为存储很便宜。

  • 有多种方法可以自动清理存储库,包括定期执行的计划任务。最坏的情况是你必须在扩展中实现你自己的逻辑

免责声明:我是 Nexus Repository Manager with Sonatype 的社区倡导者和培训师。

我同意 Manfred 的观点,您要找的是 binary repository manager. Besides the Nexus repository manager you should consider Artifactory
至于你问的功能列表:

  • 正如您所提到的,CI 服务器应该负责识别版本控制中的更改并启动创建二进制文件的构建过程。 CI server/build 工具还应该将生成的二进制文件部署到存储库管理器,以防构建成功。 Artifactory 提供了一项 build integration 功能,负责将二进制文件与构建元数据一起部署。
  • 使用 Artifactory 的构建集成功能,您可以 get a list of all the binaries generated by a specific build and download them 作为存档。 Artifactory 为这些操作提供了 REST API。
  • 在存储库管理器中存储工件有不同的方法。一些工具存储同一二进制文件的多个副本。其他的,例如 Artifactory,使用 checksum based storage 每个二进制文件只保留一个副本(基于其校验和)。如果您在不同的存储库中保留相同二进制文件的多个副本,这是值得的,尤其是当您处理大型二进制文件(war 文件、docker 图像、ISO 等)时。另一个好处是存储库之间便宜 copies/moves,这是推广工作流程的常见做法。
  • Artifactory 构建集成使用 checksum based deployment,它仅部署 Artifactory 中不存在的二进制文件。对于确实存在且未更改的二进制文件,它仅创建对现有二进制文件的新引用,从而无需发送实际字节。
  • Artifactory 提供multiple option of cleaning up binaries, including built in cleanup policies and the option to develop your own custom logic using user plugins and the Artifactory query language (AQL)

此外,我强烈建议您看看 binary repository comparison matrix

免责声明:我在 Artifactory 背后的公司 JFrog 工作