2017-02-26 84 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