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

时间:2016-01-28 09:09:41

标签: repository binaryfiles nexus artifactory archiva

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

  • 更新源代码并获取相应的二进制文件应该很容易(我们可能会为此创建一个脚本)
  • 您应该轻松地立即获取所有二进制文件(不仅仅是在上一次增量构建期间更改的那些二进制文件。
  • 未更改的二进制文件只能在存储库中存储一次。
  • 更新源代码和二进制文件时,只应传输更改的二进制文件(而不是所有二进制文件)。这类似于源代码所发生的情况。
  • 更新到某个版本时,只应在本地存储该版本,而不是完整的历史记录。
  • 我们应该能够在一段时间后从二进制“存储库”中删除某些版本。但是,如果后续增量构建仍然需要dll,那么这些dll当然不应该从“存储库”中完全删除。

符合这些要求的是什么?

2 个答案:

答案 0 :(得分:8)

我同意曼弗雷德,你要找的是binary repository manager。除了Nexus存储库管理器,您还应该考虑Artifactory 至于您询问的功能列表:

  • 正如您所提到的,CI服务器应负责识别版本控制中的更改并启动创建二进制文件的构建过程。如果构建成功,CI服务器/构建工具还应将生成的二进制文件部署到存储库管理器。 Artifactory提供build integration功能,负责将二进制文件与构建元数据一起部署。
  • 使用Artifactory的构建集成功能,您可以get列出由特定构建生成的所有二进制文件,并download them作为存档。 Artifactory为这些操作提供REST API。
  • 存在将工件存储在存储库管理器中的不同方法。某些工具存储同一二进制文件的多个副本。其他,例如Artifactory,使用checksum based storage,每个二进制文件只保留一个副本(基于其校验和)。如果您在不同的存储库中保留相同二进制文件的多个副本,尤其是在处理大型二进制文件(war文件,docker镜像,ISO等)时,这将付出代价。另一个好处是存储库之间的廉价副本/移动,这是促销工作流程的常见做法。
  • Artifactory构建集成使用checksum based deployment,它仅部署Artifactory中不存在的二进制文件。对于确实存在且未更改的二进制文件,它只创建了对现有二进制文件的新引用,从而节省了发送实际字节的需要。
  • Artifactory提供清除二进制文件的multiple选项,包括内置清理策略以及使用user pluginsArtifactory query language(AQL)
  • 开发自定义逻辑的选项

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

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

答案 1 :(得分:-2)

您基本上要求使用Nexus Repository Manager等存储库管理器,因为您已正确识别标签。

就您提出的问题的具体要求而言,这里有几个想法。

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

  • 访问二进制文件通常是通过HTTP完成的,因此很容易。然后你必须确定获得"所有二进制文件的含义"。

  • 底层文件系统或构建工具可以不支持复制基本相同的二进制文件。我看到这两个过程都有效。然而,由于存储便宜,通常不值得付出努力。

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

  • 中实现自己的逻辑

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