我目前正在使用Chef通过Chef supermarket Jenkins cookbook部署Jenkins实例。我对_master_war.rb配方文件做了很多修改。
可以使用新版本的Jenkins食谱。我的问题是;如何更新到最新版本的食谱而不会覆盖/丢失我对当前版本的食谱所做的所有修改?
我已经查看了cookbook versions以及knife cookbook documentation上的Chef的文档,但我仍然不清楚正确的方法关于安全更新你的食谱。
感谢任何指导。
答案 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