这两天无意翻到几个月前的Evernote笔记,看到了当时对团队开发环境的一些想法。可惜后来种种,这一想法未能得到实践,只能将其完善后公诸于众,立此存照,日后有空可以一试。
考虑这套开发环境是因为我们遇到了这些问题:
当时正好看到一篇关于 vagrant 的文章,感觉这正是我想要的救命稻草。
我心目中理想的开发环境应该是这样子的:
travis-ci.org
跑跑开源项目还可以,但商业项目就免了,而且其每次构建都rebuild整套环境这个效率太低。存在的问题和期望的解决方案已经摆出来了,接下来就是如何实现的问题。这种场景是典型的虚拟机大展拳脚的地方,VmWare会很欣慰地摆出VDI + vSphere的解决方案。不过小团队人少钱紧,自然只能寻找免费的替代品,即之前提到的 vagrant
。
我对它的不太确切的理解是:一套自动化创建,部署和使用虚拟机的工具。vagrant
原生支持 virtualbox
,这就足够了。通过一系列CLI命令,我们可以很方便地操作虚拟机。
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
$ vagrant init lucid32
$ vagrant up
$ vagrant ssh
$ vagrant package --vagrantfile Vagrantfile.pkg
更详细的 vagrant
使用说明请参考其 文档,这里就不详细介绍。
在这个模型中,大家交流的基础是虚拟机。虚拟机随时被创建,随时又销毁,有一个box服务器 vagrant repo
来统一存储所有box并提供上传/下载服务。box服务器提供两类box:
任意一个box都是一个沙箱,它包含和线上环境同版本的操作系统,运行环境。同时里面有对应branch的代码库和数据库。数据库采用线上数据库的一个子集,可以让系统正常运行即可。box和用户的host OS间可以共享目录,比如说代码的目录,这样可以让用户通过host OS上的个性化编辑环境撰写代码。此外,box里的port和host OS的port要能一一映射,这样用户完全具有本地的测试体验。
详细的环境和工作场景参见下图:
这样的开发环境能满足本地办公团队,甚至远程办公团队的需要。
vagrant repo
服务器可以放在本地,以获得最好的下载速度。bagrant repo
放在一个公网服务器,让参与者都能访问(安全性不在本文讨论)。访问速度的问题可以通过本地缓存来解决,这样在多人下载同一个box时会有近乎本地访问的体验。如引文所述,本文想法尚未来得及实践,所以不保证能正常运行,所以 "try it at your own risk"。笔者个人觉得这个想法的靠谱率在 90% 以上。
送上小宝的近照一张:
如果您对本站的文章感兴趣,欢迎订阅我的微博公共账号:程序人生。每次博文发表时,您都能获得通知。此外,公共账号还会不定期推送一些短文,技术心得,供您参考。