Git上线系统

09月04日 · 2013

一、系统概述

该系统的开发主要针对页游开发采用分布式版本控制Git,而配合开发的一套针对代码进行版本控制,编译,上线的纯web化的流程系统。
系统主要由以下几大部分:
1. checkout(检出):特定版本号的代码进行内外网的穿透,(页游开发均在内网进行,发布更新在外网)
2. compile(编译):针对游戏服务端的发布,需要进行预编译。
3. tag(打包):编译好的文件采用打包方式提高传输效率。采用SVN做打包文件的历史记录工具便于回滚和跟踪
4. push(推送)

二、上线系统操作流程

以下为上线系统一次完整的发布流程

[][img1] [img1]:/assets/img/opr-flow.png
##三、内部实现细节 上线系统的操作分为游戏客户端资源的发布和服务端程序的发布.二者的的内部实现存在较大差异.如下针对各自的具体实现做详细介绍:
###客户端的发布: 客户端的发布比较简单。只包含系统概述 介绍的1,3,4。但在代码检出和打包部分,出于CDN资源同步效率及流量节省考虑。采用差异文件同步的思路。即生成上线文件过程中通过本次上线的版本与上次上线的版本做对比获取存在变化的差异文件,包括文件的A增,D删,M改.
<p class="text-info">注意:为实现CDN资源的预热和多版本(测试,联运,自营等)的切换。在CDN上存在多个资源目录如:</p> [/res_a][a]
[/res_b][b] [a]:http://pic1.webgame1.51img2.com/txdy_res_a/TXDY.swf [b]:http://pic1.webgame1.51img2.com/txdy_res_a/TXDY.swf 需要针对各个资源目录中的版本做差异化比对.
具体实现请参照代码. ###服务端的发布: 服务端的发布由于需要通过上线系统来编译。因此相对较为繁琐。
编译前准备工作
<p class="text-warning">当baselib有更新时需要对 </p> net_manager更新:

#cd  net_manager 
#/usr/local/bin/cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_CXX_FLAGS_RELEASE="-O3 -DNDEBUG" ./
#make && make install

utils更新:

#cd utils
#/usr/local/bin/cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_CXX_FLAGS_RELEASE="-O3 -DNDEBUG" ./
#make && make install

接下来的操作,参照系统概述中介绍的步骤依次进行.具体实现请参照代码

四、Web部分介绍

简要介绍下上线系统的web部分实现(不涉及代码)。主要介绍下操作相关的实体及相应的库表。

ER图:
[][img2] [img2]:/assets/img/Diagram1.png

项目目录介绍:

|--/proj
	|--web # web部分代码
		|--www #入口
			|--sgit #接口入口
		|--src
			|--views #视图
				|--git
					... #git上线系统视图部分
			|--modules
				|--git.php #git上线系统前端部分控制器(单子创建,修改,流程,日志记录)
	|--scripts #操作脚本
		|--git #主要为通过git命令完成代码文件操作的脚本
			|--txdyServer.php #服务端的代码文件拉取,编译,打包操作
			|--txdyClient.php #客户端资源文件拉取,比对,打包操作
			|--svn.php #svn相关操作
			|--gitBase.php #srv.client的基类,完成git操作的初始化.
			|--gitapi.php #Git操作API
			|--git_ticket_real.php #实现接口

	|--git  #git上线系统的资源目录,所有通过git拉取的资源接在改目录
			|--tickets #上线单对应的上线文件
				|--server
					|--jj_server
						|--201309070001
						..
					..
				|--client
					|--jj_client
					..
			|--common #服务端编译是依赖的协议文件.每次编译时需要同步
					  #该目录文件.并将.h,.cc拷贝至服务端源目录.具体实现
					  #详见server的代码实现
			|--server #服务端的源码目录
				|--webgameJj-server
				..
			|--client #客户端资源目录

代码细节这里不过多赘述.有疑问请联系:zoezou

五、系统拓扑

[][img3] [img3]:/assets/img/publish-flow.png

由上图,可以看出,上线系统除了”上线系统”子模块外.还包括9.91(现:9.103)(同步系统[内网]).6.12(发布系统)
###同步系统 同步系统主要实现上线单对应生成文件的同步,测试环境对应项目代码更新.
主要实现代码见: /opt/wwwroot/svn.51.com/

发布系统

发布系统控制相应版本代码最终发布上线.
其中包括客户端资源的CDN同步推送及版本切换,游戏服务端主程序资源并发推送更新,及服务的开,关,更新指令的集中化处理.

以上为上线系统的简要介绍,由于公司内部项目.没有开放源代码.有意向学习者可以与我联系@zoezou.或者在文章下面进行留言.大家一起交流探讨,共同进步. 相信 > 交流促进效率,分享创造价值. > –zoorz.com



友荐云推荐