我正在寻找关于厨师食谱版本pipe理的想法。 我知道你固定在环境中的特定版本,但我不知道如何去做。
我们使用图书pipe理员厨师将第三方社区图书安装到cookbooks文件夹中。 我们从不碰这些书,只是不时更新到更新的版本。
我们也有我们自定义的网站特定的食谱,从那里我们包括社区( include_recipe )。
从理论上讲,我们可以指定我们自定义书籍所依赖的社区书籍的特定版本,然后在环境configuration中设置我们的菜谱版本,但问题是这些社区书籍可能依赖于其他书籍,而没有指定版本。 而且这种深层嵌套的依赖关系可能会继续下去。
所以没有保证,当你上传食谱的厨师服务器,它不会打破刺激,因为依赖食谱也可能会改变。
我目前唯一可以看到的解决scheme是指定我们在环境configuration中使用的每一个cookbook版本,包括社区和自定义版本。 但是,我必须仔细阅读每本食谱,并找出这些版本。
我们也不时地做图书pipe理员 – 厨师更新,我想可能很难追踪更改的版本,而且在时间到了之际,不要忘记在环境中更新版本。
请分享您的经验和最佳做法。 我相信这对其他人来说是非常有用的。
在我开始认真使用厨师之后不久,我就碰到了这些相同的问题。 当我开始做四件事情的时候,我只是觉得有一点理智。 请注意,Chef社区中的某些人可能不会将这些视为“最佳做法”。 但是,这就是我带来的理智,可重复性和秩序,以我的世界。
希望这可以帮助别人!
– 更新 –
差不多三年后,这些原则对我仍然有帮助。 但是我会再增加一条build议,而且这也是出于同样的原因,我更喜欢厨师独奏。
有两个问题:
食谱版本的文章是食谱版本的最佳参考。 根据#1,你是对的,因为pipe理不同版本的食谱来服务于不同的configuration集合是一件困难的工作,尤其是与食谱依赖关系混合在一起,其中大部分来自食谱站点的食谱不能很好地完成这项工作。 所以configuration可能会中断。 如果你没有通过testing任何组件的运行时行为来pipe理版本,它就会中断。 因此,不用在您的环境对象中指定版本号就可以上传食谱。 因此,在环境对象中pipe理食谱版本,并在推广任何新食谱的版本时仔细testing。 我通常在SCM中pipe理环境对象,没有通过自动化的工作上传到厨师服务器,直到改变后的食谱可以和其他现存的组件一起工作。
根据#2,这是一个棘手的话题,因为这是每个节点上的实际配方依赖性的作用。 简而言之,对于关键节点,您最好通过在节点/angular色运行列表中指定配方版本来控制配方的依赖性。 我很难做到这一点,因为这是很好的控制和更多的testing/推广成本。 但是,对于关键angular色/节点来说,这不是一个坏主意,而是为configuration更改提供保险。