我熟悉 Artifactory、Maven 和 Nexus 等工件存储库。
Berkshelf-API / Chef Supermarket 与上述工件存储库有何不同?
乍一看,它们似乎在复制现有工件存储库中的功能(不变性、传递依赖解析等)。
澄清:这不是一个基于意见的问题,我正在寻找将Berkshelf-API / Chef Supermarket 用于 Chef Cookbooks 而不是其他典型的工件存储库 的技术原因。
我熟悉 Artifactory、Maven 和 Nexus 等工件存储库。
Berkshelf-API / Chef Supermarket 与上述工件存储库有何不同?
乍一看,它们似乎在复制现有工件存储库中的功能(不变性、传递依赖解析等)。
澄清:这不是一个基于意见的问题,我正在寻找将Berkshelf-API / Chef Supermarket 用于 Chef Cookbooks 而不是其他典型的工件存储库 的技术原因。
tl;dr - Berkshelf-API 和 Chef Supermarket 是 Berkshelf 用于下载食谱依赖项的工具。他们为 Berkshelf 提供了一个特殊格式的 .JSON 文档,用于确定食谱的依赖关系。我没有发现不能修改其他工件存储库以返回类似格式的 .JSON 文档的原因,但据我所知,目前还没有。
Berkshelf-API:“一个服务器,它索引来自各种来源的食谱并通过 REST API 托管它”
事实上,Berkshelf-API 被Chef Supermarket使用。
您可以通过将“/universe”附加到 url ( https://supermarket.getchef.com/universe )来手动从超市中提取食谱列表。
当 Berkshelf 用于解决依赖关系时(使用“berks install”或“berks update”),它会在食谱的 Berksfile 顶部查找源条目(通常是“source” https://supermarket.getchef.com ) .
Berksfile 在源条目下方也有“元数据”。这将加载说明书 metadata.rb 文件中列出的说明书依赖项。这些可以被 Berksfile 中“元数据”条目下方列出的说明书依赖项覆盖。
Berkshelf 然后开始从源条目(在本例中为超市)下载说明书依赖项。
但是,Berkshelf 不会递归加载 metadata.rb 或 Berkshelf 依赖文件。
例如:如果 Foo 依赖于 Bar 则依赖于 Baz
Foo => 酒吧 => Baz
Foo 将在 metadata.rb 或 Berksfile 中指示 Bar 依赖项。
Bar 将在 metadata.rb 或 Berksfile 中指示 Baz 依赖项。
然而,Berkshelf 不会通过读取 Bar 的 metadata.rb 或 Berksfile 来确定 Bar(在本例中为 Baz)的依赖关系。相反,它通过使用来自 Berkshelf-API 的版本化说明书的缓存列表来确定 Bar 的依赖关系,该列表从对源条目的调用返回。
私有 Berkshelf-API 服务器可以设置多个端点指向不同的食谱存储库(另一个 Berkshelf-API 服务器或 Chef 服务器)。
因此,常见的用法是指向 Private Chef 服务器(存储非公共食谱)和 Chef Supermarket 服务器(存储公共食谱)的 Private Berkshelf-API 服务器。