手游公司运维之利用Rundeck自动化运维工具和Shell脚本构建测试环境代码发布平台和生产环境代码发布平台

一 应用场景描述

在做手游运维工作之前,我接触的代码发布都是常规的软件发布,有固定的发布周期。之前工作的那个外企有严格的发布周期,一年中的所有发布计划都是由Release Manager来控制,每次发布之前都需要做一些准备工作,如填写发布表单,上传发布需要的资源文件,联系发布过程中的相关人员,如开发和测试。最后在公司内部开发的发布平台上按照指定的时间点击鼠标对一个集群内的几台主机或全部主机进行代码发布。这个发布平台还是基于rsync服务实现的。虽然每个星期都有各种服务的发布,但是整个发布流程是可以控制的,并且发布时间点也是定好的。除非有特殊情况需要进行Rollback操作,即回退到之前的版本。

在刚来到目前公司的时候,游戏代码发布简直就是噩梦。没有发布周期,没有发布计划,随时随地更新代码,而且开发和测试以及运维都是使用同一个svn分支。这完全颠覆了我之前对代码发布的理解。加上公司其他各方面乱七八糟的事情凑在一起,明明知道这样不对,但是还是这样撑到了年后。刚开始是手动上传代码,后来是编写脚本利用rsync同步代码,最后实在是厌倦了到服务器上去执行脚本,就想用网页的方式去执行脚本,点点鼠标那样,经过研究发现Rundeck很适合我们这边的应用场景。

目前我们的发布流程分为测试环境代码发布和线上代码发布两大步骤。其中具体流程为

1)从SVN开发分支合并代码到SVN测试分支

2)从SVN策划分支整合策划资源到SVN测试分支

3)同步SVN测试分支代码到测试环境

4)测试通过以后再提交代码到SVN测试分支

5)合并SVN测试分支代码到SVN发布分支

6)提交代码到SVN发布分支

7)跟新资源和代码到一万服即线上内测服,它的数据和线上一个区的数据互通

8)一万服测试通过后,从一万服同步代码和资源以及相应的配置到全区全服


前六个步骤属于公司内部测试范畴,第七步属于线上内测范畴。第八步属于正式代码发布范畴,会直接影响到玩家的体验。其中,前七个步骤由测试同事去执行操作,因为不会影响到外网的玩家体验,最后一步同步全区全服由运维同事操作。这样讲游戏代码发布的流程条例化,减少运维同事的工作量,测试环节就由测试同事去把控,正式全服同步的时候由运营及测试作评估,再由运维同事直接操作。

整个流程中运维需要做的工作有:

1)编写相应步骤的脚本

2)维护测试环境

3)管理测试环境代码发布平台和线上环境代码发布平台,将不同组的用户赋予不同的操作权限,如测试同事只能执行某些操作,而不能有编辑操作。


通过实行这个上线流程以后,运维同事的工作减轻了不少,不用挨个平台登录到服务器去执行相关脚本,只需在点点鼠标就可以达到目的。同时,测试同事再也不用像之前那样还要自己去执行一些SVN提交,更新测试环境的操作,全都通过发布平台点点鼠标就可以搞定。测试同事只需专注于游戏测试本身而不用去关心非测试相关的技术问题,减少各个部门之间的相互依赖。


二 Rundeck工具介绍

研究Rundeck之前我一直在寻找一个工具能够通过WEB界面去执行脚本用于代码发布。最开始想要研究的是ControlTier这个自动化部署工具。通过http://www.controltier.org/ 了解到ControlTier这个项目已经在2013年5月份停止维护,并且大部分的代码贡献者已经转投Rundeck这个项目,它继承了ControlTier的很多特性,都是为了达到持续集成和自动部署的目的。所以我就直接改用Rundeck了。

Rundeck的官方网站是http://rundeck.org/ 。Rundeck特别适合那种对同一件工作牵涉到多个部门的应用场景,如代码发布,牵扯到测试部门,运营部门和运维部门。在代码发布的过程中,不仅运维同事可以操作,测试部门也可以在一定权限之类去执行任务。

Rundeck还可以和SaltStack,Puppet,Chef等工具整合,利用它的API接口还可以和自己的资产管理系统,聊天工具等整合。

Use Rundeck to define standard operating procedures

Use Rundeck for zero-click deployment


Use Rundeck to enable self-service test environments

Use Rundeck to managae data processing jobs in the cloud

Use Rundeck to build custom ops platforms and tools

DataCom_RundeckUserStory.png


三 Rundeck目前在公司的应用案例

由于使用Rundeck之前我已经编写了很多脚本,之前一直是登录到服务器上去执行代码发布脚本,为了最大程度的利用之前的脚本,就直接在Rundeck上创建相应的项目并添加相应的步骤,每个步骤对应相应的脚本。这样就不用再登录到服务器上去执行脚本操作了。省时省力!


spacer.gif测试环境发布平台
spacer.gif wKiom1Nq4BHD_lsOAAD3mfzvGmc250.jpg

不同权限的用户登录以后能够执行的操作不同,如属于qa组的用户进入后不能编辑Project,属于ops组的用户进入后可以编辑和执行远程命令。

wKioL1Nq5e3BRy2sAATWNwYi8ms711.jpg

wKioL1Nq9MOCsiJCAAQd-0-blfI454.jpg


每个项目可以定义多个任务,每个任务可以归属于不同的组


wKioL1Nq9YiQzTGWAAJ_yZo34_M659.jpg


wKioL1Nq9wWz8R2CAALtRNS1bwQ661.jpg


Rundeck里面创建的每个项目都需要一个xml或yaml格式的主机列表,执行每项任务的时候可以选择在哪些主机上去执行。


wKioL1Nq-HTBtLlaAAJfxtjwmCc126.jpg

通过Rundeck可以对远程主机执行命令,并将结果显示在页面

wKioL1Nq-emCWqwaAAOZwZks7jo761.jpg


Rundeck可以记录操作记录,在什么时间由谁执行了什么操作,成功还是失败。

wKioL1Nq_gHCRqbfAAZoLRkUCU4325.jpg





你可能感兴趣的:(shell,rundeck,自动化发布平台)