2017-02-26 54 views
1

我们有时候在烹饪环境中无法完全测试食谱,因为结果并不总是反映生产环境中可能发生的情况。作为一种解决方案是什么,我试图做的是冻结版本,像这样的环境:在其运行列表明确指定,像这样的新版本在单台生产服务器上测试食谱更新

{ 
    "name": "production", 
    "description": "Production Environment", 
    "cookbook_versions": { 
    "deployment": "= 0.1.12" 
    }, 
... 

,并排除该限制的特定服务器:

... 
    "run_list": [ 
    "recipe[base]", 
    "recipe[security]", 
    "recipe[deployment::[email protected]]" 
] 
... 

问题是,当环境的版本是不一样的,在run_list,厨师,客户指定的卡上resolving cookbooks for run list: ...

这是为什么?有没有办法解决这个问题?有没有更好的方法来在一台服务器上测试配方的更新?

回答

2

您无法覆盖现有约束,因此您必须临时将该节点移动到新环境以进行测试。

+0

不幸的是,这样会破坏目的,因为根据节点的环境,一些配方的行为会有所不同,也就是说,测试不会反映生产中会发生什么。此外,我不认为这是真的,这似乎是足够基本的设计。我还发现,即使在没有限制的情况下,在运行列表中使用特定版本时,厨师也会在同一个地方挂起。它似乎只是一个错误。 –

+0

该功能很少使用,因为我们可以测试它,所以我可以相当自信地说它没有(简单的)错误。也就是说,即使存在,它也不会在环境中产生冲突约束,因为该错误是正确的并且按照设计工作。 – coderanger

+0

另一种方法是在生产环境中禁用守护进程模式或后台聚合,更新环境,然后在少数机器上运行Canary部署。 – coderanger

相关问题