由于我在团队中工作,我希望尽可能顺利地使用vagrant(和chef-solo)。 当团队中的某个人改变厨师烹饪书,角色或其他任何东西时,我希望所有其他团队成员通过在下一个“流浪汉”上进行流浪汉重新供应(如运行“流浪者条款”)来自动“接收”变更,没有每个团队成员都需要了解它并手动重新提供。
我想通过在根项目文件夹中使用git post-receive钩子脚本touch
来完成此任务。然后,当调用“vagrant up”时,它将检查该文件是否存在。如果文件存在 - 一旦“up”运行完毕,它将重新提供。
这样做有更好的选择吗?怎么样?
如果没有,我该怎么做?
我知道这个问题(Force Vagrant to re-provision or download a new box on next vagrant up)存在,但这不是我的情况(我特别感兴趣的是配置,而不是虚拟机本身 - 盒子等等。)。
答案 0 :(得分:2)
您可以在Vagrantfile
的顶部添加以下内容:
# On vagrant up check that we have the latest repo changes if ARGV[0] == "up" && ARGV.join(" ") != "up --no-provision" gs = `git status` # command to check repo status gs.scan(/.*Your branch is behind.*/m) { |mtch| # check for out of date message puts "Your Vagrant files are out of date... fetching..." `git pull origin master` # command to fetch newest files. exec "vagrant up --no-provision;vagrant provision" # Re-run vagrant up and provision } end
假设您使用Git存储所有Vagrant文件和cookbook等,这应该运行Git状态(它可能还需要提取)并检查消息是否有任何提示文件已过期...如果它们已过时,它将提取最新文件,然后在运行vagrant up
之前使用--no-provision
重新运行vagrant provision
以重新配置服务器。
答案 1 :(得分:2)
Vagrant支持添加vagrant up
每个:run => "always"
上运行的配置程序,方法是将{{1}}添加到配置行。
您可以添加一个供应商,检查是否需要进行任何更改,然后运行它们。 (或者,如果更改是可重复的,则每次都运行它们。)
"始终运行"记录在此处:https://docs.vagrantup.com/v2/provisioning/basic_usage.html