【问题标题】:Deployment with Chef使用 Chef 进行部署
【发布时间】:2015-04-10 02:47:20
【问题描述】:

我正在使用主厨资源“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 个远程分支,有没有办法从特定环境的特定分支进行部署?例如,开发节点部署开发远程分支,测试部署测试远程分支等等。这样,我可以在每 30 分钟发生一次的自动部署上设置一个门。我参考了厨师文档,有这个“deploy_branch”,但我不确定它只是说它与“deploy_revision”相同。 https://docs.chef.io/resource_deploy.html#layout-modifiers

根据 chef 文档,有一个可用的属性分支。那么添加属性是我需要的吗?

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"

如果你们认为使用 Chef 进行部署不是一个好主意。你认为-我应该注意 Capistrano 吗?

【问题讨论】:

    标签: deployment chef-infra chef-recipe


    【解决方案1】:

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

    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
    

    【讨论】:

    • 分支“node.chef_environment”和修订节点['chef_environment'] 有什么区别 .. 我试图让 deploy_revison 将远程开发、测试、登台、生产分支部署到节点在我的厨师食谱中属于开发、测试、登台、生产环境
    • node['chef_environment'] 与 node.chef_environment 相同。 revision 只是 deploy_revision 资源的属性。
    • 我已将代码修改为 pastebin.com/GUB2rh1Z .. 但厨师仍然部署存储库的 origin/dev 分支上的代码。我期望它将代码部署在 origin/test 分支中,因为该节点属于厨师的测试环境。厨师日志只是说“获取来源更新”
    • 您需要查看您的日志输出。它应该向您显示它正在使用的修订版,这将使您更好地了解正在发生的事情。
    【解决方案2】:

    这对我来说是这样的。

    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
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多