使用virtualbox搭建一个实用的开发环境

来源:互联网 发布:专利运营企业知乎 编辑:程序博客网 时间:2024/05/16 03:43

开发服务器的部署

在开发过程中一般需要很多的工具和服务,比如svn server,building server等等。这些工具和服务应该如何实际的部署到服务器是一个很头疼的问题。从管理和配置角度来看,就像软件本身划分功能模块一样,最好是按照功能划分,每个工具和服务都在一个独立的服务器上面,尽量减少各种工具安装和配置上的冲突。但是从实际来看,由于这些工具和服务一般都不会长时间的占用系统资源,这样会造成大部分时间服务器都是空闲的,造成极度的浪费。而且这样也会增加实际物理服务器的数量,提高了硬件的维护成本。所以一般都是将几个工具和服务同时部署到一台服务器上面。那么应该如何对这些工具和服务进行组合才是合理的呢?这个问题没有标准的答案,需要根据不同的项目进行实际的评估。如果发现配置的不够合理,那就需要对工具和服务进行迁移,这是很麻烦的工作。

使用virtual box来解决这些问题再好不过了。可以按照最理想的管理配置方案为每一个工具和服务建立一个vb虚拟机,然后将这些vb虚拟机部署到服务器上面。将vb虚拟机的网络模式改为桥接模式,并配置与服务器在一个子网的ip,这些虚拟机就可以像真实的服务器一样在子网内访问。在服务器之间迁移vb虚拟机基本上不需要什么麻烦的工作,把虚拟机的虚拟硬盘文件拷贝到服务器上,重新运行虚拟器。就是这么简单,甚至虚拟机的ip都不用改变,使用者完全不会感受到迁移所带来的任何影响。这也可以说是现在流行的“云计算”的想法吧。

如果发现虚拟机的计算能力不够,它的的硬件配置,比如cpu数量,内存大小,硬盘大小都可以按照需要进行修改。虚拟机的os我一直在使用ubuntu server LTS,资源占用少,安装工具方便,还能得到及时的更新。我保存了一个安装好系统的虚拟硬盘文件,每次需要建立新的虚拟机,都直接从这个硬盘文件复制出新的虚拟硬盘,省去了安装系统的时间。宿主机的硬件配置应该尽量使用更多的cpu核心,更大的内存,更大的硬盘,我想一台8核心8GB的服务器肯定要比两台4核心4GB的服务器便宜的多。如果宿主机使用的是windows系统,可以使用vboxvmservice将虚拟机安装成windows服务,使其可以随着宿主机自动开关。

一个实例

以下是一个实际的开发环境,也是我现在在使用的开发环境。这样的结构对于大型的开发团队可能过于简单,但是对于中小型的项目还是很实际的。

SVN主服务器

使用基于http协议的apache+mod_dav_svn。使用http协议的好处是在没有svn client的情况下还可以通过浏览器查看版本仓库。所有的项目都作为svn主目录下的子目录存在,这样在添加新的项目时不用进行额外的配置,就可以通过http://svn_server_url/project_dir_name进行访问。

SVN备份服务器

用来自动备份SVN主服务器的代码仓库。使用svn的repository replication功能实现备份,当要加入一个新项目的备份时可以使用initbak.sh脚本
initbak.sh
svnadmin create ./$1echo "#!/bin/sh" >./$1/hooks/pre-revprop-changeecho "exit 0" >> ./$1/hooks/pre-revprop-changechmod +x ./$1/hooks/pre-revprop-changesvnsync init file:///home/yuanlin/svnbak/$1 http://192.168.1.220/svn/$1svnsync sync file:///home/yuanlin/svnbak/$1
将svnbak.sh脚本放到/etc/cron.hourly/下面,每个小时进行一次备份。
svnbak.sh
#!/bin/shbakdir="/home/yuanlin/svnbak/"dirs=$(ls $bakdir)for dir in $dirsdo        if [ -d $bakdir$dir ]        then                /usr/bin/svnsync sync file://$bakdir$dir        fidone

BuildBot Master

监控svn的提交,在各个BuildBot Slave上面执行平台相关的构建和测试命令,并收集结果通过web方式呈现给开发者。所有开发者可以通过web方式访问BuildBot Master来获得构建的状态。
在Master上你可以任意组织你的Slave需要执行的构建命令,一般来说包括:
  • 从仓库获得最新版本代码(svn update)
  • 做一些代码的自动检查工作,比如对cpp进行静态分析
  • 构建工程
  • 构建单元测试
  • 运行所有单元测试
  • 将构建结果打包并提供给开发人员下载

BuildBot Slave

执行BuildBot Master的命令,做平台相关的构建和运行测试。我现在使用两个slave,一个utuntu,一个windows。这些slave上面首先要配置好构建和运行所需要的环境,比如工具和依赖库。
Windows Slave比较麻烦,需要自己建立所有的依赖关系。如果windows上的构建过程需要MS VisualStudio,那就需要使用VisualStudio的命令行构建模式。为了更好的在windows上实现自动化,我使用cygwin环境下的python建立window slave。

Cacti

用来监控开发环境中所有真实服务器和虚拟机的运行状态,比如cpu占用量,内存用量,硬盘用量等等。Cacti基于SNMP协议,使用起来非常方便。可以根据这些监控数据对服务器进行调整。
原创粉丝点击