本次的自动化脚本部署肯定不是通用的,更多的是提供一种思路,如何让整个编译流程脚本化。这次是部署服务器,其他时候也有很多重复的事情,都可以用脚本代替人力。我所在项目是在Windows环境下开发,然后在本地Centos服务器上编译,最后将编译好的版本在传到上传服务器。整个流程比较复杂,本文只探讨在Centos上的编译自动化。因此整个编译过程是这样的:
1、开启mysql和http服务
2、用SVN 得到最新的代码
3、是否要打开eclipse
4、选择要编译的服务器
5、是否将最新的版本更新到服务器版本库里
6、是否要将版本库里的最新版本上传到远端
7、是否要启动所有服务
思路清晰了, 剩余的就是编码了,本文用的是shell,项目里用的不仅仅是这些代码,我只是将整体的结构写出来,代码如下:
#!/bin/sh # This shell is used for building server version auto # Writer:lfwu # Emali:zgwulongfei@gmail.com #Functions make_server() { echo "Start compile server:"`date` cd /home/trunk/server make clean make all } start_server() { cd /home/trunk/server/bin time_now=`date+"%Y%m%d"` ./server >"server_$time_now.log" & ps | grep "server" echo "start server success" } #Start service echo "Start mysql and http service" su root -c "service httpd start" su root -c "service mysqld start" #Update code echo "Update server source" cd /home/trunk/server su root -c "svn update" $Check if open eclipse echo "Open eclispe?(y/n)" read answer if[ $answer = "y" ] then echo "start eclipse..." cd /soft/eclipse su user -c "eclipse &" fi #Print make menu echo "----------make menu---------" echo "1.make all server" echo "2.make server" echo "----------make menu---------" read answer if[ $answer = "1" ] then make_server fi #Update release version echo "Update the server version?(y/n)" read answer if[ $answer = "y" ] then version_path="/home/trunk/version" cur_path="/home/trunk/server/bin" if[ -d $version_path ] then cp -f "$cur_path/server" "$version" else makedir $version_path fi fi #Add the release version to svn cd $version_path su root -c "svn add *" #Commit the release version to server echo "Commit the release?(y/n)" read answer if[ $answer = "y" ] then cd $version_path su root -c "svn add *" su root -c "svn ci -m " Now, a new version is release..."" fi #Start server echo "Start server?(y/n)" read answer if[ $answer = "y" ] then start_server fi
为啥要开启eclipse呢,因为整个工程是Windows下开发的,没有makefile,这么大的项目,如果手动写makefile到猴年马月了,因此采用eclipse自动声称makefile。所以需要打开eclipse,每次重新生成makefile,或者修改其它配置属性,详情可参照我之前的文章。由于是后台运行服务器程序,所以在测试阶段,将输出到控制台的日志全部输出到以日期命名的日志文件里,这样当服务器发生什么问题的时候可以随时查询。其实我这是多此一举的,因为服务器本身就有很强大的日志系统,不过对于咱们平常调试程序,如果自己的程序没有日志系统,这种方法还是很好用的。