基于云的分布式部署开发环境方案

时间:2021-10-18 06:09:50

最近在参与开源的12306项目,考虑到整个开发团队都是分布在世界各地的 - 真有身在国外的同仁参与,要在这样广泛分布的团队里确保同样的开发环境,并且做到新人能快速配置好开发环境不是一件容易的事情。另外,如何快速将产品部署到云里面的机器上,也将会是一个麻烦的事情。

前一段时间刚好有个项目机会,是关于CHEF的,CHEF就是用来在云环境里快速部署程序所依赖的软件的。你可以把它等同于编译程序用的make、maven之类的工具,只不过CHEF是用来管理软件配置之间的依赖关系,而不仅仅是安装文件那么简单。比如说,要准备一个Java Web的开发环境,从裸机开始,需要安装Linux系统、安装JDK、安装Maven、安装apache、安装Mysql。为了让这些工具配合起来一起工作,需要做一些设置,例如设置Mysql的管理员密码,设置Java程序访问MySql的连接字符串,设置apache的端口号等等。很多管理依赖的工具都是基于自定义的DSL实现的,例如make程序需要写Makefile,Maven需要pom.xml。这种自定义DSL的方式最大的问题就是在开发阶段,配置文件写错了,排错非常困难,只能依赖make、maven这些工具自带的日志功能去排错。而CHEF使用的是另外一种途径,CHEF是使用ruby语言开发的,它使用的DSL也就是用ruby描述的,因此在配置出错时,可以使用与调试ruby一样的方式来排错,而且使用编程语言来写DSL的好处就是弹性足够大。

正好趁12306项目的机会,我用CHEF和Vagrant做了一个可以快速同步分发开发环境的工具,源码已经上传到github:

https://github.com/shiyimin/12306

这是使用说明:

  1. 下载并安装Virtual Box 4.2: https://www.virtualbox.org/wiki/Downloads
  2. 下载并安装Vagrant: http://vagrantup.com/
  3. 观看视频说明:http://v.youku.com/v_show/id_XNDU4NzA5MDA4.html 

这里讲解视频说明里用到的命令:

  1. 首先整个开发环境使用的是ubuntu,为了保证整个开发环境一致,首先做了一个非常小的ubuntu虚拟机-大小是260M,这个虚拟机里只有最基本的内核和shell,没有安装任何工具。vagrant box add base http://files.vagrantup.com/lucid32.box,这个命令就是把虚拟机模板下载到本地,命名为“base”。
  2. 在github的源代码里,我写了一系列的配置工具,保存在“cookbooks”文件夹里,cookbooks文件夹里的每个文件夹包含了要安装的工具,以及安装这些工具的方法以及配置手段。可以看到,我在里面安装了apache2、apt、boost、jdk、maven、mysql等工具。
  3. 团队其它成员要准备开发程序时,无论他是否之前有开发环境,只需要将源代码同步下来,在宿主机的命令行里进入源代码的根目录,执行命令:vagrant up。
  4. 这时vagrant会调用chef,自动一步步安装cookbooks里每个文件夹对应的程序,并且配置它。

具体的代码会在后面的文章讲到,各位网友可以先把代码下载下来,并运行一下看看效果。