gan*_*est 10 versioning dependencies chef best-practices
我正在寻找有关厨师食谱版本管理的想法。我知道您在环境中固定了特定版本,但我不确定如何去做。
我们使用librarian-chef 将第3 方社区书籍安装到cookbooks 文件夹中。我们从不碰这些书,只是不时更新到最新版本。
我们还提供自定义站点特定食谱,其中包含社区食谱 ( include_recipe
)。
理论上我们可以指定自定义书籍所依赖的社区书籍的特定版本,然后在环境配置中设置我们的食谱版本,但问题是这些社区书籍可能依赖于其他一些没有指定版本的书籍。并且这种深度嵌套的依赖可能会持续下去。
因此,无法保证当您将食谱上传到厨师服务器时,它不会破坏产品,因为依赖的食谱也可能会发生变化。
目前我能看到的唯一解决方案是指定我们在环境配置中使用的每个食谱版本,包括社区和自定义版本。但后来我必须仔细阅读每本食谱并找出那些版本。
我们还不时进行图书管理员-厨师更新,我想可能会很难追踪更改的版本,并且在时间到来时不要忘记更新环境中的版本。
请分享您的经验和最佳实践。我相信它对其他人非常有用。
pla*_*rms 11
在我开始认真使用 Chef 后不久,我就遇到了同样的问题。当我开始在操作上做四件事时,我才开始理智起来。请注意,Chef 社区中的某些人可能不会将这些视为“最佳实践”。尽管如此,这就是我为我的世界带来理智、可重复性和秩序的方式。
希望这可以帮助某人!
- 更新 -
近三年后,这些原则对我仍然有帮助。但我会再添加一条建议,这真的是出于同样的原因,我更喜欢厨师独奏而不是厨师。
小智 3
有2个问题:
菜谱版本要点一文是菜谱版本的最佳参考。根据#1,你是对的,因为管理不同版本的说明书来提供不同的配置集是一项艰巨的工作,特别是它与说明书依赖项混合在一起,其中说明书网站上的大多数说明书都不能很好地完成这项工作。所以配置可能会中断。如果您没有通过测试任何组件的运行时行为来管理版本,它就会崩溃。因此,在环境对象中不指定版本号的情况下上传说明书是一个坏主意。因此,管理环境对象中的食谱版本,并在推广任何新食谱的版本时仔细测试。我通常在 SCM 中管理环境对象,并且不会通过自动化作业上传到厨师服务器,直到更改后的食谱可以与其他现有组件的其余部分很好地配合使用。
根据#2,这是一个棘手的主题,因为这是每个节点上实际配方依赖关系起作用的地方。简而言之,对于关键节点,最好通过在节点/角色运行列表中指定配方版本来控制配方的依赖关系。我几乎不这样做,因为它的粒度控制很好,而且测试/推广的成本更高。然而,对于关键角色/节点来说,这不是一个坏主意,而是为配置更改提供了保障。