开发服务器的部署
在开发过程中一般需要很多的工具和服务,比如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主服务器
SVN备份服务器
svnadmin create ./$1
echo "#!/bin/sh" >./$1/hooks/pre-revprop-change
echo "exit 0" >> ./$1/hooks/pre-revprop-change
chmod +x ./$1/hooks/pre-revprop-change
svnsync init file:///home/yuanlin/svnbak/$1 http://192.168.1.220/svn/$1
svnsync sync file:///home/yuanlin/svnbak/$1
#!/bin/sh
bakdir="/home/yuanlin/svnbak/"
dirs=$(ls $bakdir)
for dir in $dirs
do
if [ -d $bakdir$dir ]
then
/usr/bin/svnsync sync file://$bakdir$dir
fi
done
BuildBot Master
- 从仓库获得最新版本代码(svn update)
- 做一些代码的自动检查工作,比如对cpp进行静态分析
- 构建工程
- 构建单元测试
- 运行所有单元测试
- 将构建结果打包并提供给开发人员下载