Happy Coding, Happy Life

Vagrant - Make Dev Environment Easy

| Comments

背景介绍

  • 最近的Java项目是个同海外团队合作的遗留系统,包括数据库服务器、邮件服务器、Web服务器、FAST搜索引擎、JBOSS中间件等等节点。为了便于团队使用,我们在Amazon 的EC2上建立了一套完整的端到端的运行环境。

  • 团队成员在本地搭建了Web环境,数据库环境,便于开发及调试。但由于Mac上安装FAST并不是一件易事,因此在本地跑应用的时候依赖于Amazon EC2的FAST节点。

  • 持续集成、CI在当今的时代已经不是什么新鲜玩意了,越来越多的团队已经了解并运用在实践中。对于我们和海外客户共同开发的这种情况,CI挂了可不是太好,因此在每次提交代码之前,需要确保本地所有的测试都能通过,才能提交代码。

于是乎,问题就来了:

  • 当网络不给力的时候,连不上FAST,就无法在本地跑测试,也就无法提交代码,降低了开发效率。

  • 每次跑测试,会清空FAST的数据并重新注入测试数据。所以,就导致某对Pair正在本地跑测试时,另外一对Pair清空了FAST的数据,最终测试失败。

鉴于这2点,如果每人都有一个本地的FAST环境,既不用担心网络带来的影响,又不会影响他人,于是就有了构建虚拟机环境的需求。

引发的思考

说到这,其实回想起以前,也碰到类似的情况,但估计当时还不够痛,也就没有理会。 :( 实际上,对于当今的屌丝程序猿而言,产品的开发/部署环境变得越来越复杂。无论你是开发人员、测试人员,还是系统维护人员,如何搭建一个运行环境,快速、高效的部署以及配置软件应用,成了困扰我们的一个大问题。在这种情况下,无论对于个人,还是团队,高效的使用虚拟化技术,创建独立的产品运行环境也就变得越来越重要。

对于个人
  • Ubuntu新的版本发布了,听说很cool,想试试但多操作系统麻烦啊
  • NoSQL有这么多产品,装多了会不会影响本地的开发环境
  • 当前产品的技术栈复杂啊,新人来了跑个应用,就得花上个2天,伤不起啊
    …….
对于开发团队
  • Same dependencies
  • Same versions
  • Same configurations
  • Same everything

我们期望团队的开发/运行环境能够完全一样,但实际上这并不容易。
这种不同来自很多方面,软件的版本、服务之间的通信、运行的配置或者各种库的依赖等。

解决方案

最终,我们使用Vagrant解决了问题。大体流程如下所示:

  • 创建和产品运行环境一样的VM(譬如CentOS 6.0)
  • 安装并配置FAST
  • 根据需要配置VM的各种参数,如网络,内存等信息
  • 将VM重新发布成BOX
  • 将BOX发布到内部服务器上,并且将VM的配置文件放入版本管理系统

最终,团队的成员只需Clone代码,敲入如下命令,花2分钟时间,就启动了本地的FAST环境,完全解决了之前遇到的两点问题。 vagrant init fast http://dist-server/fast.box vagrant up

当然,这只是一个简单地尝试,接下来会使用Vagrant搭建整个环境,让团队的开发、测试以及部署流程变得更加行云流水,并更易维护。

Comments