在部署时,厨师会覆盖文件所有者吗?可以避免吗?

时间:2017-07-10 15:04:37

标签: deployment chef devops

我有一个用于部署我们的webapp的厨师食谱,有些文件夹和文件需要由www-data:www-data创建和拥有。在部署应用程序时,我在deploy食谱中使用厨师的deploy.rb命令来执行此操作:

deploy "#{app_dir}" do
  repository tmp_dir
  user "root"
  group "root"
  environment app[:environment]
  symlink_before_migrate({})
end

然后,这些文件和文件夹的创建和权限设置在before_symlink.rb脚本中完成,如下所示:

execute "ensure correct owner of storage folder" do
  command "chown -R www-data:www-data #{release_path}/storage"
end

我一直在调试,我已经检查了这个:

    执行
  1. chown,用户存在,我可以在主厨日志中看到它。
  2. 如果我在before_symlink的末尾执行sleep命令,然后ssh进入机器,我可以在storage文件夹中看到该文件夹​​归www-data所有,因为我愿望。
  3. 如果我在sleep上的deploy命令之后立即执行deploy.rb命令,然后ssh到机器,那么现在release文件夹将链接到current文件夹和每个文件和文件夹将由root:root拥有,从而导致权限错误。
  4. 因此,似乎在部署结束时,厨师似乎会将每个部署文件的所有者覆盖给进行部署的用户。这是真的?有没有办法在before_symlink.rb上设置所有者的文件和文件夹?

1 个答案:

答案 0 :(得分:0)

真的确实不使用部署资源。您想要的可能是git资源及其user属性。