【问题标题】:Repository for storing derived information (build artifacts)用于存储派生信息(构建工件)的存储库
【发布时间】:2016-01-28 09:09:40
【问题描述】:

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

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

什么能满足这些要求?

【问题讨论】:

    标签: repository binaryfiles nexus artifactory archiva


    【解决方案1】:

    我同意 Manfred 的观点,您正在寻找的是 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

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

    【讨论】:

      【解决方案2】:

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

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

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

      • 访问二进制文件通常是通过 HTTP 完成的,因此很容易。然后,您只需确定获取“所有二进制文件”意味着什么。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 2018-10-18
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        相关资源
        最近更新 更多