检测 Vagrantfile 中的 git 分支并使用它来控制 vm 供应脚本、仅主机网络 ip 地址等
detect git branch in Vagrantfile and use it to control vm provisioning script, host only network ip address, etc
我公司的情况有点特殊,我们有一个巨大的 git 存储库,其中包含我们所有的代码。
短期内很难将代码分离成库和模块。
但我们希望 "generate" 服务器基于代码应该扮演的角色,例如网站、soap web 服务、rest web 服务等
一个想法是使用 git 分支来表示变化。代码大部分相同,但控制服务器行为的配置文件会有所不同。
我将其写入我们的 bash 配置脚本并且它有效。
我现在正在查看 Vagrant 是否支持这样的方案。
谢谢。
您必须自己实现切换逻辑,但这应该相当简单。
在某处(可能在 configure
块之前)你会想要计算出当前分支是什么:
branch = `git rev-parse --abbrev-ref HEAD`
然后,根据需要在框定义中使用它。例如,您可以根据分支切换供应商:
# snip
shell_provisioner = case branch
when 'master' then 'path/to/provisioner.sh'
when 'widgets' then 'path/to/widgets.sh'
end
config.vm.provision :shell, path: shell_provisioner
这是无限灵活的,取决于您实际想要根据分支改变什么。如果需要,我很乐意对此进行扩展。
我公司的情况有点特殊,我们有一个巨大的 git 存储库,其中包含我们所有的代码。
短期内很难将代码分离成库和模块。
但我们希望 "generate" 服务器基于代码应该扮演的角色,例如网站、soap web 服务、rest web 服务等
一个想法是使用 git 分支来表示变化。代码大部分相同,但控制服务器行为的配置文件会有所不同。
我将其写入我们的 bash 配置脚本并且它有效。
我现在正在查看 Vagrant 是否支持这样的方案。
谢谢。
您必须自己实现切换逻辑,但这应该相当简单。
在某处(可能在 configure
块之前)你会想要计算出当前分支是什么:
branch = `git rev-parse --abbrev-ref HEAD`
然后,根据需要在框定义中使用它。例如,您可以根据分支切换供应商:
# snip
shell_provisioner = case branch
when 'master' then 'path/to/provisioner.sh'
when 'widgets' then 'path/to/widgets.sh'
end
config.vm.provision :shell, path: shell_provisioner
这是无限灵活的,取决于您实际想要根据分支改变什么。如果需要,我很乐意对此进行扩展。