Maven Berkself api和Chef Supermarket与传统的工件存储库有什么不同?

Maven Berkself api和Chef Supermarket与传统的工件存储库有什么不同?,maven,chef-infra,nexus,artifactory,berkshelf,Maven,Chef Infra,Nexus,Artifactory,Berkshelf,我熟悉工件库,如Artifactory、Maven和Nexus Berkself API/Chef Supermarket与上述工件存储库有什么不同 乍一看,他们似乎是在复制已经存在的工件存储库中的特性(不变性、可传递的依赖项解析等) 澄清:这不是一个基于意见的问题,我正在寻找技术原因为什么Berkself API/Chef Supermarket用于Chef Cookbooks而不是其他典型的工件存储库 tl;Berkself博士的API和Chef Supermarket是Berkself用来

我熟悉工件库,如Artifactory、Maven和Nexus

Berkself API/Chef Supermarket与上述工件存储库有什么不同

乍一看,他们似乎是在复制已经存在的工件存储库中的特性(不变性、可传递的依赖项解析等)


澄清:这不是一个基于意见的问题,我正在寻找技术原因为什么Berkself API/Chef Supermarket用于Chef Cookbooks而不是其他典型的工件存储库

tl;Berkself博士的API和Chef Supermarket是Berkself用来下载食谱依赖项的工具。它们为Berkshelf提供了一个特殊格式的.JSON文档,用于确定烹饪书的依赖关系。我没有发现其他工件存储库不能被修改以返回类似formatted.JSON文档的原因,但据我所知,目前没有一个可以这样做。

:“一个服务器,它为来自不同来源的烹饪书编制索引,并通过REST API托管它”

事实上,Berkshelf API由使用

通过在url()中添加“/universe”,可以手动从超市中提取食谱列表

当使用BerksShelf解析依赖项(使用“berks安装”或“berks更新”)时,它会查找源条目(通常是位于cookbook的Berksfile顶部的“source”)

Berksfile在源条目下面还有“元数据”。这将加载cookbooks metadata.rb文件中列出的cookbook依赖项。这些可以被Berksfile中“metadata”项下面列出的cookbook依赖项覆盖

Berkself然后开始从源条目(在本例中为超市)下载cookbook依赖项

但是,Berkshelf不会递归加载依赖项的metadata.rb或Berkshelf文件。

例:如果Foo依赖于Bar,那么哪个依赖于Baz

Foo=>Bar=>Baz

Foo将在metadata.rb或Berksfile中指示条依赖关系

条形图将指示metadata.rb或Berksfile中的Baz依赖项

但是,BerksShelf不会通过读取Bar的metadata.rb或Berksfile来确定Bar(在本例中为Baz)的依赖关系。相反,它使用对源条目的调用返回的Berkself API中版本化烹饪书的缓存列表来确定Bar的依赖关系

可以使用指向不同烹饪书存储库(另一台Berkshell API服务器或Chef服务器)的多个端点设置私有Berkshell API服务器


因此,一个常见的用法是私有API服务器,它同时指向私有厨师服务器(存储非公共烹饪书)和厨师超市服务器(存储公共烹饪书)

这最好在邮件列表上询问,或者在#chef IRC频道(我也是那里的coderanger)上找我,我可以给你一个概述。这已经在IRC上得到了回答。@coderanger:谢谢你帮助我了解这项工作的细节。请为我澄清一个疑问。比如说:我有一个配方a,它取决于配方B和配方C。现在这个配方B取决于配方D,配方C取决于配方E。如果我在我的伯克斯档案中只提到配方B和配方C,它会自动管理菜谱D和E吗?我是否也必须在berksfile中提到它们的名字?如果你不使用BerksShelf API服务器,那么你需要在每本菜谱中编写完整的依赖链。如果您确实使用了Berkshelf API服务器,那么您只需要在每个烹饪书中编写一个依赖项步骤,然后由Berkshelf使用API服务器编译完整的链。