与Chef部署

时间:2015-04-07 20:49:12

标签: deployment chef chef-recipe

我正在使用chef资源“deploy_revision”在我的节点上部署python代码。我最初开始这是一个开发环境,但现在慢慢需要扩展,我不确定 - 如果这是一个不错的选择。下面是代码。

data_bag = Chef::EncryptedDataBagItem.load("#{node.chef_environment}", "#{node.chef_environment}")

deploy_revision "/opt/mount/#{node[:application_name]}" do
  repo "#{node[:application_repo]}"
  user "deployer"
  keep_releases 10
  action :deploy
  migrate false
  symlink_before_migrate.clear
  create_dirs_before_symlink
  purge_before_symlink.clear
  symlinks.clear
  symlinks {}
  notifies :restart, "service[abc]"
end

在节点上每隔30分钟自动厨师运行期间,只要有一个新代码,就会将其拉下来。这很酷但在其他节点中并不那么酷,这些节点不属于开发环境。我有4个环境: 开发 测试 阶段 刺

如果我在git上创建4个远程分支,是否有办法在特定环境中从特定分支进行此部署?有点像,开发节点部署dev远程分支,测试部署测试远程分支等等。这样,我可以在每30分钟发生一次的自动部署上设置一个门。我提到了厨师文档,有这个“deploy_branch”,但我不确定它只是说它与“deploy_revision”相同。 https://docs.chef.io/resource_deploy.html#layout-modifiers

根据厨师文档,有一个属性分支可用。所以添加属性就像我需要的那样?

deploy_revision "/opt/mount/#{node[:application_name]}" do
  repo "#{node[:application_repo]}"
  user "deployer"
  branch "node.chef_environment"    
  keep_releases 10
  action :deploy
  migrate false
  symlink_before_migrate.clear
  create_dirs_before_symlink
  purge_before_symlink.clear
  symlinks.clear
  symlinks {}
  notifies :restart, "service[abc]"
end

然后,我遇到了这个错误报告(已关闭):https://tickets.opscode.com/browse/CHEF-5084。它似乎是使用属性“revision”指定分支。那么,我可以将此属性与节点环境一起用作参数吗?喜欢这个

revision "node.chef_environments"

如果你们这些人认为使用厨师进行部署并不是一个好主意。你觉得 - 我应该留意卡皮斯特拉诺?

2 个答案:

答案 0 :(得分:0)

我们一直这样做。只需添加:

deploy_revision '/path' do
  ...
  revision node['chef_environment']
  ...
end

或者在我们的例子中,我们从chef_environment

计算分支
deploy_revision '/path' do
  ...
  revision node['chef_environment'].match(/develop|staging|production|test/)[0]
  ...
end

答案 1 :(得分:0)

这就是我的工作方式。

deploy_revision "/opt/mount/#{node[:application_name]}" do
  repo "#{node[:application_repo]}"
  user "deployer"
  revision node.chef_environment    
  keep_releases 10
  action :deploy
  migrate false
  symlink_before_migrate.clear
  create_dirs_before_symlink
  purge_before_symlink.clear
  symlinks.clear
  symlinks {}
  notifies :restart, "service[abc]"
end