在“vagrant up”时有条件地提供(“vagrant provision”)

7
自从我加入团队以来,我希望使用vagrant(和chef-solo)的工作流程尽可能顺畅。当团队中的某个人更改了chef cookbooks、roles或其他内容时,我希望所有其他团队成员都能通过在下一次“vagrant up”时重新运行“vagrant provision”来自动“接收”这些更改,而不需要每个团队成员都知道并手动重新运行provision。
我考虑通过让git post-receive钩子脚本在根项目文件夹上触发一个文件touch来实现这一点。然后,当调用“vagrant up”时,它将检查该文件是否存在。如果该文件存在-在“up”完成运行后,它将重新提供服务。
是否有更好的选择?如何操作?
我知道有一个类似的问题(Force Vagrant to re-provision or download a new box on next vagrant up),但这并不完全符合我的情况(我特别关注provisioning,而不是virtualbox机器本身-box等)。
2个回答

2
您可以将以下内容添加到您的Vagrantfile的顶部:
# 在vagrant up时检查我们是否有最新的仓库更改
if ARGV[0] == "up" && ARGV.join(" ") != "up --no-provision"
  gs = `git status` # 检查仓库状态的命令
  gs.scan(/.*Your branch is behind.*/m) { |mtch| # 检查是否过时
    puts "您的Vagrant文件已过时...正在获取最新文件..."
    `git pull origin master` # 获取最新文件的命令
    exec "vagrant up --no-provision;vagrant provision" # 重新运行vagrant up和vagrant provision
  }
end
假设您使用Git存储所有Vagrant文件和cookbook等,这应该运行Git状态(可能还需要获取)并检查消息以查看文件是否过时...如果文件过时,它将拉取最新文件,然后重新运行vagrant up--no-provision一起运行,再运行vagrant provision重新配置服务器。

2
Vagrant支持添加每次vagrant up都会运行的配置程序,只需在配置行中添加:run => "always"即可。您可以添加一个配置程序来检查是否需要进行任何更改,然后运行它们。如果更改是可重复的,则每次运行它们即可。"Run Always"的文档在此处:https://docs.vagrantup.com/v2/provisioning/basic_usage.html

1
正确的语法不应该是:run => "always"吗?我认为你漏了引号。 - The WebMacheter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接