计算机是没有智力的,只会接受指令,运行指令,得出结果。因此就算你让它重复做一件事多少次,它也学不会自动去做这件事。对于重复繁琐的事情,做为一个懒惰的程序员,必须告诉机器去做这件事情,然后就行了,而不是每次重复告诉机器做重复的事情。因此脚本可以代替程序员去做这些繁琐的事情了。机器做事情不仅准确,而且从来不抱怨。

     本次的自动化脚本部署肯定不是通用的,更多的是提供一种思路,如何让整个编译流程脚本化。这次是部署服务器,其他时候也有很多重复的事情,都可以用脚本代替人力。我所在项目是在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,或者修改其它配置属性,详情可参照我之前的文章。由于是后台运行服务器程序,所以在测试阶段,将输出到控制台的日志全部输出到以日期命名的日志文件里,这样当服务器发生什么问题的时候可以随时查询。其实我这是多此一举的,因为服务器本身就有很强大的日志系统,不过对于咱们平常调试程序,如果自己的程序没有日志系统,这种方法还是很好用的。

Centos环境下部署游戏服务器-自动化的更多相关文章

  1. Centos环境下部署游戏服务器-软件安装

    这篇文章主要介绍一下游戏服务器需要安装的软件和需要修改的配置.现介绍下项目,本项目服务器端是c++ + mysql组合,客户端是as写的,需要安装的服务为Mysql,Php,Apache, 以及一个n ...

  2. Centos环境下部署游戏服务器-常用命令

         图1     在Linux的世界,如果你不玩命令,那你见了同行都不好意思和人家打招呼.同时服务器正常状况下放在远端,一般都是开ssh登录服务器,相信远程桌面的人很少见吧.这篇文章说说Linu ...

  3. Centos环境下部署游戏服务器-编译

    游戏服务器是在windows环境开发的,相关跨平台的东西在这里不谈了,只谈如何将Visual Studio 工程转换到Linux下编译.这里涉及到的软件分别为:Centos版本为6.4,Visual ...

  4. Centos环境下部署游戏服务器-权限

    部署Web服务器的时候,在"DocumentRoot"指向的根目录新建一个文件夹,然后将网页和资源放在这个文件夹里,通过地址http://192.168.0.100/Res/ind ...

  5. Centos环境下部署游戏服务器-简介

    一.前言      在接触这个操作系统之前我一直使用的是ubuntu和mac os,这次由于游戏是测试版本,没有专业的运维人员去做这件事情,只能我这个稍微懂一点linux的人来做这件事情了.由于涉及到 ...

  6. Centos环境下部署游戏服务器-iptables

    简介:   图1        Centos做为服务器级操作系统,防火墙是不可缺少的.防火墙的主要功能为控制进出网络包,防火墙就如小区门卫的工作职责,检查出入小区居民的身份,如果不符合小区门卫管理条例 ...

  7. Centos环境下部署游戏服务器-SVN

    版本控制工具的文章已经被写滥了,所以本篇文章不想介绍如何安装Svn如何可视化操作这些东西.本篇文章讲述我自己对Svn的理解,以及在命令行下操作.为啥不应可视化界面?有两方面的原因,远程登录到服务器都是 ...

  8. Centos环境下部署游戏服务器-SSH

    在这个*nix大行其道的年代,SSH绝对值得你拥有,虽说它的语法真的很简单,可用途相当大.比如说你在登山,突然公司一个电话告诉你服务器出问题了,在登山的过程中,肯定不能背个几公斤的笔记本吧,这个时候只 ...

  9. Centos环境下部署游戏服务器-Eclipse

    一直在想这篇文章该不该写,因为这篇文章更像是教你如何使用一个ide这种文章,毫无价值可言.但思来想去还是应给写.上篇文章主要说了编译原理和过程,这篇文章就是理论联系实际的典范.并且很多工程师一辈子都不 ...

随机推荐

  1. 如何在github上fork一个项目来贡献代码以及同步原作者的修改

    [-] 如何贡献自己的力量 如何让自己的项目与原作者的项目保持同步 作为一个IT人,通过github进行学习是最快的成长手 段.我们可以浏览别人的优秀代码.但只看不动手还是成长得很慢,因此为别人贡献代 ...

  2. [磁盘管理与分区]——关于分区、磁盘分区表、MBR

    磁盘连接与设备文件名的关系 1. 如下图所示:

  3. vsftpd配置文件说明

    (1)常用选项: chroot_local_user=YES #限制所有的用户均不能切换到其他目录 allow_writeable_chroot=YES #允许根目录可写 FTP的工作模式有两种,一种 ...

  4. JS多种方法实现随机颜色;

    JS随机颜色有很多地方要用到:比如大家看到很多标签连接都是五颜六色.实现随机颜色的方法有多种,下面来看看具体的实现代码: 方法一: var getRandomColor = function() { ...

  5. mysql--乱码

    不知道为什么utf8反而会乱码,每次都是设gbk,,唉这样写项目的时候也是有点问题的T  T set names gbk; 版权声明:本文为博主原创文章,未经博主允许不得转载.

  6. eclipse部署Tomcat6 : The server does not support version 3.0 of the JEE Web module specification

    为项目添加tomcat 6,发现不能添加,原因如下 这是因为Tomcat6不能为JavaEE3.0版本服务,把项目的版本降低到2.5就可以了 现在可以部署了

  7. 设计模式之状态模式(State)

    状态模式原理:随着状态的变化,对象的行为也发生变化 代码如下: #include <iostream> #include <string> #include <list& ...

  8. BZOJ1143 [CTSC2008] 祭祀river

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题目大意: 给你n个点,点与点之间由有向边相连.如果u能到达v的话,那么他们就不能同 ...

  9. 事务并发处理: DB+ORM+逻辑代码

    在学习了马士兵有关事务并发处理的视频后, 感觉对事务并发处理的概念,问题以及解决方式有了一定的了解,赶紧记录下来以备后用. 1. 事务:一系列操作要么都完成,要么一个都不完成 2. 事务并发:多个事务 ...

  10. [百度空间] [原] 全局operator delete重载到DLL

    由于很久没有搞内存管理了,很多细节都忘记了今天项目要用到operator delete重载到DLL,发现了问题,网上搜索以后,再对比以前写的代码,发现了问题:原来MSVC默认的operator new ...