使用开源 Chef 食谱时——我们应该在 Berksfile 中克隆还是引用?
When using open source Chef cookbooks - should we clone or reference in Berksfile?
假设我正在构建我的 /my_company_cookbooks collection 并且我想使用来自 Github.
的很棒的社区食谱
我有两个选择
- 通过向我的 Berksfile 添加一行来引用 github 中的食谱(食谱 'graphite'、git:'git://github.com/hw-cookbooks/graphite.git'
)
- 本地副本 - 将食谱克隆到我的 /my_company_cookbooks 文件夹中并保留对它的本地引用。
每种策略似乎都有优点和缺点。
Github优点
- 没有本地副本
- 作者很容易完成修复
Github缺点
- 我如何确定我的生产食谱完全取决于我在登台测试的食谱版本。作者可能会忘记在更改代码的同时更改食谱版本。未经测试的代码更改将到达我的生产环境
本地副本优点
我可以 100% 确定地测试并推向生产,调试更容易
本地副本缺点
- 如何获取食谱的更新副本(再次克隆?)
- 我会在 git 存储库中有一个 git 存储库吗?
- 使用本地副本,其他说明书开发人员可以修改克隆的说明书,这使得在 github
上发布新版本的说明书时更难同步
关于此事有什么想法或最佳做法吗?
谢谢
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.1 版的东西拉下来。
- 厨师开发人员对食谱进行了更实质性的更改,但再次没有增加版本号(因为他还没有准备好发布)。
您的 Chef 服务器现在有一个 1.1 版的副本与版本控制系统中最新的 1.1 版副本不匹配....
为了解决这个问题,您需要明确地 运行 a "berks update" 然后将食谱强制重新加载到您的厨师服务器(记住 berkshelf 冻结食谱),使事情复杂化... .. 这可能会成为一个不小的问题,我不止一次被它烧毁(奇怪的是超市没有 openstack 食谱)。
在一天结束时,如果您与其他开发团队的名字一致,则从源代码中使用 :-) 如果您渴望稳定,另一种解决方案是仅从 Git 标签中使用,这是最好的装进厨师超市的食谱确实遵循这一做法。
大厨超市提供的是大厨菜谱的发布管理流程。 Git 应该跟踪食谱中文件的所有更改。但它无法检测食谱何时可以发布。这是开发人员的工作,如果他表现良好并遵循合理的工作流程,他将标记他的代码,然后将其推送到某种存储库中以供第 3 方下载。超市提供的正是这种加工和储存设施。这是你的朋友我强烈推荐使用它:-)
抱歉啰嗦!治疗 :-)
假设我正在构建我的 /my_company_cookbooks collection 并且我想使用来自 Github.
的很棒的社区食谱我有两个选择
- 通过向我的 Berksfile 添加一行来引用 github 中的食谱(食谱 'graphite'、git:'git://github.com/hw-cookbooks/graphite.git' )
- 本地副本 - 将食谱克隆到我的 /my_company_cookbooks 文件夹中并保留对它的本地引用。
每种策略似乎都有优点和缺点。
Github优点
- 没有本地副本
- 作者很容易完成修复
Github缺点 - 我如何确定我的生产食谱完全取决于我在登台测试的食谱版本。作者可能会忘记在更改代码的同时更改食谱版本。未经测试的代码更改将到达我的生产环境
本地副本优点 我可以 100% 确定地测试并推向生产,调试更容易
本地副本缺点
- 如何获取食谱的更新副本(再次克隆?)
- 我会在 git 存储库中有一个 git 存储库吗?
- 使用本地副本,其他说明书开发人员可以修改克隆的说明书,这使得在 github 上发布新版本的说明书时更难同步
关于此事有什么想法或最佳做法吗?
谢谢
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.1 版的东西拉下来。
- 厨师开发人员对食谱进行了更实质性的更改,但再次没有增加版本号(因为他还没有准备好发布)。
您的 Chef 服务器现在有一个 1.1 版的副本与版本控制系统中最新的 1.1 版副本不匹配....
为了解决这个问题,您需要明确地 运行 a "berks update" 然后将食谱强制重新加载到您的厨师服务器(记住 berkshelf 冻结食谱),使事情复杂化... .. 这可能会成为一个不小的问题,我不止一次被它烧毁(奇怪的是超市没有 openstack 食谱)。
在一天结束时,如果您与其他开发团队的名字一致,则从源代码中使用 :-) 如果您渴望稳定,另一种解决方案是仅从 Git 标签中使用,这是最好的装进厨师超市的食谱确实遵循这一做法。
大厨超市提供的是大厨菜谱的发布管理流程。 Git 应该跟踪食谱中文件的所有更改。但它无法检测食谱何时可以发布。这是开发人员的工作,如果他表现良好并遵循合理的工作流程,他将标记他的代码,然后将其推送到某种存储库中以供第 3 方下载。超市提供的正是这种加工和储存设施。这是你的朋友我强烈推荐使用它:-)
抱歉啰嗦!治疗 :-)