有人能建议一种跨主机(即 Windows、Mac 或 Linux)跨平台将数据从 VM 主机复制到 VM[0] 的方法吗?现在,我通过在 VM 中循环运行 rsync 来实现这一点,这显然不太好。
从高层次上讲,我为使用极不一致的开发环境的开发人员提供一致的构建/测试环境。当开发人员克隆代码库时,会在后台启动一个虚拟机,以便在他们在主机上编辑代码时运行滚动增量构建和测试。
我当前的实现是让虚拟机以只读方式挂载一个包含源代码的同步文件夹。我不希望虚拟机向主机文件系统写入任何内容,因为这可能会干扰开发人员运行的手动构建或测试。因此,我让虚拟机将源目录的内容复制到仅供客户使用的文件系统[1]。
我通过运行永久 bash 脚本每三秒 rsync 一次内容来执行此复制。
while true
do
sleep 3
rsync -av --exclude '.git' --exclude-from $MOUNTDIR/.gitignore $MOUNTDIR/ $BUILDDIR/
done
显然,这并不理想。
我研究过使用各种文件系统观察器(基于 inotify 或 kqueue),但它们都与特定类型的文件系统(NTFS、ext3/4、HFS+)绑定。
有没有跨平台的方式来监视文件系统的变化?无论是对文件系统特定的推送通知服务进行抽象,还是与平台无关的轮询系统?
现有的库或工具中是否存在这样的功能?或者是否存在一些我遗漏的常见模式。
[0] Virtualbox 虚拟机管理程序,由 Vagrant 配置,运行 Ubuntu,但我对所有这些依赖项都很灵活。
[1] 我尝试通过符号链接到已挂载的文件夹来实现这一点,但我们的构建系统gulp
会解析符号链接,从而带来麻烦