使用开源 Chef 食谱时——我们应该在 Berksfile 中克隆还是引用?

When using open source Chef cookbooks - should we clone or reference in Berksfile?

假设我正在构建我的 /my_company_cookbooks collection 并且我想使用来自 Github.

的很棒的社区食谱

我有两个选择

  1. 通过向我的 Berksfile 添加一行来引用 github 中的食谱(食谱 'graphite'、git:'git://github.com/hw-cookbooks/graphite.git' )
  2. 本地副本 - 将食谱克隆到我的 /my_company_cookbooks 文件夹中并保留对它的本地引用。

每种策略似乎都有优点和缺点。

Github优点

Github缺点 - 我如何确定我的生产食谱完全取决于我在登台测试的食谱版本。作者可能会忘记在更改代码的同时更改食谱版本。未经测试的代码更改将到达我的生产环境

本地副本优点 我可以 100% 确定地测试并推向生产,调试更容易

本地副本缺点

关于此事有什么想法或最佳做法吗?

谢谢

引用Berkshelf documentation

GitHub Location

As of version 1.0.0, you may now use GitHub shorthand to specify a location.

cookbook "artifact", github: "RiotGames/artifact-cookbook", tag: "0.9.8" Given this example, the artifact cookbook from the RiotGames organization in the artifact-cookbook repository with a tag of 0.9.8 will be cloned to the berkshelf.

我假设这消除了 github 的缺点,那么您现在就没有理由不使用它了。

尽可能使用社区 "supermarket" 存储库中的食谱。例如,以下将检索最新版本的石墨:

source 'https://supermarket.chef.io'

cookbook "graphite"

文档显示此食谱由 heavywater dudes:

管理

为什么?使用源代码存储库中的食谱时,您 运行 将相同版本的替代副本加载到您的厨师服务器中的风险很小。


嗯?请解释!

采用以下场景:

  1. 厨师开发人员对他的食谱做了一个小改动,但没有增加食谱版本号 1.1
  2. 你把你认为是食谱 1.1 版的东西拉下来。
  3. 厨师开发人员对食谱进行了更实质性的更改,但再次没有增加版本号(因为他还没有准备好发布)。

您的 Chef 服务器现在有一个 1.1 版的副本与版本控制系统中最新的 1.1 版副本不匹配....

为了解决这个问题,您需要明确地 运行 a "berks update" 然后将食谱强制重新加载到您的厨师服务器(记住 berkshelf 冻结食谱),使事情复杂化... .. 这可能会成为一个不小的问题,我不止一次被它烧毁(奇怪的是超市没有 openstack 食谱)。

在一天结束时,如果您与其他开发团队的名字一致,则从源代码中使用 :-) 如果您渴望稳定,另一种解决方案是仅从 Git 标签中使用,这是最好的装进厨师超市的食谱确实遵循这一做法。

大厨超市提供的是大厨菜谱的发布管理流程。 Git 应该跟踪食谱中文件的所有更改。但它无法检测食谱何时可以发布。这是开发人员的工作,如果他表现良好并遵循合理的工作流程,他将标记他的代码,然后将其推送到某种存储库中以供第 3 方下载。超市提供的正是这种加工和储存设施。这是你的朋友我强烈推荐使用它:-)

抱歉啰嗦!治疗 :-)