如何安全地将烹饪书更新到最新版本?

时间:2017-06-16 13:04:09

标签: chef

我目前正在使用Chef通过Chef supermarket Jenkins cookbook部署Jenkins实例。我对_master_war.rb配方文件做了很多修改。

可以使用新版本的Jenkins食谱。我的问题是;如何更新到最新版本的食谱而不会覆盖/丢失我对当前版本的食谱所做的所有修改?

我已经查看了cookbook versions以及knife cookbook documentation上的Chef的文档,但我仍然不清楚正确的方法关于安全更新你的食谱。

感谢任何指导。

1 个答案:

答案 0 :(得分:2)

安全更新的最佳方法是永远不要直接修改社区食谱并使用包装食谱。

此包装器将在社区食谱上depends显示其metadata.rb中的特定版本(有关此here的更多详细信息):

depends "jenkins", "~> 2.3"

您将在包装器菜谱属性文件中调整社区菜谱的属性 它们将在社区烹饪书之后加载(有关详细信息,请参阅attributes precedence),您必须特别关注派生属性(如果您愿意,请参阅https://coderanger.net/chef-tips/#5以获取解决方法),如果社区食谱有:

default['jenkins']['version'] = "2.0.1"
default['jenkins']['download_url'] = "https://some.site/artifacts/jenkins-#{node['jenkins']['version']}"

并且您希望重写版本,然后您必须重做包装器食谱中的两个属性,第二行的download_url不会再次评估。

然后,它会在其食谱中包含社区食谱,并利用edit_resource recipe DSL method来修改社区食谱行为:

include_recipe 'jenkins::default'

edit_resource(:template, '/etc/jenkins/config.cnf') do
  source 'aliases.erb'
  cookbook 'aliases'
end