Tars批量发布的轮子

Tars的开源Web管理没有提供 SET区域层级 批量发布的功能(内部版本里面我记得有),提了Issue( https://github.com/TarsCloud/TarsWeb/issues/13 )也没回馈。想想自己也算对Tars熟悉,于是便挽起袖子造轮子。

需求比较明确,在上面的Issue里面也说的比较清楚:对一个app众多set里的同一server服务进行发布更新。

最终实现: https://github.com/lanyutc/TarsBatchPatch

Tars发布流程

首先我们分析一下常规Tars发布流程,通过web管理页面发布版本主要有三个步骤:

  1. 将需要发布的程序通过make tar打包;
  2. 将打好的tgz包上传;
  3. 选择需要发布的Server进行发布;

这里主要是针对第3步进行造轮子,首先进一步分析第3步的流程:

停止Server:通过tarsAdminRegistry的stopServer接口控制,会找到对应ip的nodeServer,再通过nodeServer停止对应app.server;

发布Server:通过tarsAdminRegistry的batchPatch接口控制,找到对应ip的nodeServer进行patchVersion包的拷贝,注意这是一个异步过程;

查询发布进度:通过tarsAdminRegistry的batchPatch接口控制,去nodeServer查询发布是否完成;

启动Server:通过tarsAdminRegistry的startServer接口控制,去nodeServer启动对应的app.server;

实现拆分

  • 一个实现上述流程图的程序,需要预留参数:tarsAdminRegistry的Obj+地址、app名字、server名字、server所在的ip(即对应nodeServer的ip)、需要发布server的版本号(将tgz包上传后获得的版本号);
  • 一个shell脚本,至于传递的参数见仁见智,将打印输出至patch.log;
  • 检查patch.log是否有错误导致发布失败,若有失败需要重新发布失败的ip;

我把最终的实现放在这里: https://github.com/lanyutc/TarsBatchPatch

关于发布工具的一些提示(Readme)

  • 编译使用前需要部署Tars开发环境;
  • 直接使用make编译工具;
  • Usage:./PatchClient –adminreg=[adminreg] –app=[appname] –servername=[servername] –serverip=[serverip] –patchversion=[version];
  • patch_server_example.sh只是一个样例,可以改成自己需要的;
  • 错误检查命令:awk -F ‘|’ ‘{if(NF>3 && $3!=0) print $0}’ patch.log;
  • 代码实现里默认查询发布进度持续10s,有需要可以自行延长;

(全文结束)


转载文章请注明出处:漫漫路 - lanindex.com

Leave a Comment

Your email address will not be published.