使用开源Chef cookbook时 - 我们应该在Berksfile中克隆还是引用?

时间:2015-09-02 15:43:30

标签: chef chef-recipe

说我正在构建我的/ my_company_cookbooks集合,我想使用Github的一个很棒的社区食谱。

我有两个选择

  1. 通过在我的Berksfile中添加一行来参考github中的食谱(cookbook'graphite',git:'git://github.com/hw-cookbooks/graphite.git' )
  2. 本地副本 - 将cookbook克隆到my / my_company_cookbooks文件夹中并保留对其的本地引用。
  3. 每种策略似乎都有优点和缺点。

    Github值得

    • 没有本地副本
    • 轻松修复作者

    Github缺点   - 我如何确定我的生产食谱完全取决于我在分期测试时所测试的烹饪书的版本。作者可以忘记在修改代码的同时修改cookbook版本。未经测试的代码更改将到达我的生产环境

    本地副本值得 我可以100%确定地测试和推动生产。调试更容易

    本地副本缺点

    • 如何获取食谱的更新副本(再次克隆?)
    • 我会在git repo中有一个git repo吗?
    • 使用本地副本,其他食谱开发人员可以修改克隆的食谱,在github上发布新版本的食谱时更难同步

    在这件事上有任何想法或最佳做法吗?

    由于

2 个答案:

答案 0 :(得分:3)

在可能的情况下消费来自社区"超市的食谱"库。例如,以下内容将检索最新版本的graphite:

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

cookbook "graphite"

文档显示此烹饪书由heavywater dudes

管理

为什么呢?从源代码存储库中使用cookbook时,您可能会面临将相同版本的备用副本加载到Chef服务器中的小风险。

咦?请解释!

采取以下方案:

  1. 厨师开发人员对他的食谱进行了一些小改动,但没有增加食谱版本号,1.1
  2. 你拉下你认为的食谱1.1版本。
  3. 厨师开发人员对食谱进行了更大幅度的更改,但同样不会增加版本号(因为他还没准备好发布)。
  4. 您的厨师服务器现在拥有版本1.1的副本,该副本与版本控制系统中版本1.1的最新副本不匹配....

    使您需要明确运行" berks update"然后强制重新加载食谱到你的厨师服务器(记得berkshelf冻结食谱),以解决这个问题.....这可能成为一个非常重要的问题,我已被它不止一次烧毁(奇怪的是openstack超市不提供食谱。

    如果您与其他开发团队一起使用名字条款,那么最终消费来源:-)如果您渴望稳定,另一种解决方案是仅使用Git标签,这是加载cookbook的最佳做法进入厨师超市做跟进。

    Chef超市提供的是厨师烹饪书的发布管理流程。 Git应该跟踪cookbook中文件的所有更改。但它无法检测到烹饪书何时准备好发布。这是开发人员的工作,如果他的行为和遵循合理的工作流程,他会标记他的代码,然后将其推送到某种存储库,供第三方下载。超市提供的是这个过程和存储设施。它是你的朋友我强烈推荐使用它: - )

    长吼道歉!治疗: - )

答案 1 :(得分:2)

引用Berkshelf documentation

  

GitHub位置

     

从版本1.0.0开始,您现在可以使用GitHub速记来指定   位置。

     

cookbook" artifact",github:" RiotGames / artifact-cookbook",tag:   " 0.9.8"鉴于这个例子,来自RiotGames的神器食谱   artifact-cookbook存储库中的组织,标记为0.9.8   将被克隆到berkshelf。

我认为这样可以消除github的缺点,然后你就没有理由不再使用它了。