基于python复制蓝鲸作业平台

前言

        去年看武sir代码发布的视频无意中听到了蓝鲸平台但是一直没深究,前一段时间公司要搞一个代码发布平台,但是需求变化很多一直找不到一个很好的参考

        模板,直到试用了一下蓝鲸作业平台发现“一切皆作业”的思想非常好,比如一个简单变更发布:

        1. 对 web 组(3 台机器)停服务

                         在三台机器上执行(/home/tomcat/bin/shutdown.sh)

        2.对web组(3台机器)更新版本文件

                         在三台机器执行(scp xxx yyy),有些公司可能是rsync同步、(git pull)客户端拉取、svn拉取等等。

        3.对web组 (3台机器)启动服务

                         在三台机器上执行(/home/tomcat/bin/startup.sh)

        面对不同的公司不同的变更场景,变更发布无非就是停服务、拉取版本文件、分发版本文件到各个服务器、启动服务。有些场景可能需要再停server应用,有些可能

        用的git或者别的同步,所有这些都可以通过linux命令来操作,将命令封装成脚本也就是原子,不同的原子按照一定的业务场景执行顺序组合成作业,之后的代码发布

        便可以一键完成,换到不同的公司,不同的业务场景无非就是原子执行顺序、执行的机器、执行的原子脚本等等不同而已。

        基于此便准备用python复制一个作业平台,虽然是重复造轮子但更能加深对作业平台的理解。

        整个作业平台开发从技术调研到完成耗时将近3个月,差不多每天利用晚上两个小时和周末时间写点,项目写到一半差点想放弃,因为前端实在是太恶心了,而且项

        目刚写完,存放代码的服务器就挂了,数据完全丢失,真是天灾人祸啊,还好笔记本虚拟机里保留了一份代码和小泽玛利亚的最新作品,要不然真想回机房搬服务器

        去。

 

涉及的技术:

        平台使用python的django框架开发

        异步执行作业使用celery(定时作业也会用到)

        在远程服务器上执行脚本用saltstack的agent(也可以用paramiko、ansible、puppet、自己开发agent等等)

        剩下的就是html、JavaScript、jQuery、css(好恶心)等等

 

思路:

        整个开发刚开始感觉只要理解了蓝鲸作业平台的表结构那么整个平台的思路差不多就清晰了。

        主要是以下几张表:

        nm_account(执行账户):存放在每台机器上执行的账户

1 CREATE TABLE `nm_account` (
2   `account` varchar(255) NOT NULL COMMENT '账户名',
3   `appId` int(11) NOT NULL COMMENT '业务id',
4   `creater` varchar(128) NOT NULL COMMENT '创建人',
5   `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
6   PRIMARY KEY (`account`,`appId`)
7 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
View Code

 

        nm_script(执行脚本) :代码发布变更所有需要执行的脚本

        nm_task(作业名称):不同脚步所组合的作业

        nm_step(作业步骤):每一个作业所涉及的脚本执行顺序

        nm_taskInstance(作业实例):每一个作业执行后的历史记录,在作业平台里叫作业实例

        nm_stepInstance(作业实例步骤):每一个作业实例所涉及的脚本执行步骤

        执行机器可以从CMDB里获取,如果公司已有CMDB就可以直接调接口获取服务器信息。

 

总结:

        但凡涉及到人工交互的操作就无法用这种自动化作业完成。

        时间紧没来的及加上定时执行作业,下个版本加上。

        蓝鲸的作业平台执行作业时是实时输出结果的,而saltstack的agent只有在作业完全执行完后才返回结果,对应作业执行时间长的

        用户体验不是很好,还是得自己重新设计开发agent。        

        代码发布还只是项目更新里的一部分,传统的项目变更流程是:

        1.开发更新完项目代码  --> 2.开发发邮件给测试人员进行测试 --> 3.测试通过后需要相关开发、测试、运维的领导发邮件确认  -->

        4.运维收到确认邮件后进行代码发布操作

        有些公司可能走的OA或OA+邮件流程,其实整个就是一套工单系统,开发申请项目更新的工单—>测试人员接到工单后进行测试——>

        运维收到测试通过的工单后进行下一步变更操作。代码发布只是完成最后一步变更的操作,这时候把作业平台里的每个作业加上接口, 

        提供给其它系统调用,比如工单系统,测试人员在测试通过后直接就调用作业的接口执行相关的作业操作,无需运维参与,如果中间还需要

        相关领导审批,那么在领导审批通过之后再调接口执行作业。有点类似敏捷开发。

     

        图省事的话推荐大家用腾讯的蓝鲸平台。   

        https://v.qq.com/x/page/g0175dx1yzf.html

        蓝鲸作业平台操作视频

        http://bbs.bk.tencent.com/forum.php?mod=viewthread&tid=181 

        作业平台介绍

        http://bk.tencent.com/download/

        蓝鲸平台社区版下载

 

我自己的作业平台效果图:

         1.服务器信息(只为作业平台调服务器信息简单写的一个,实在不敢叫CMDB,后期可以从别的CMDB系统里调取)

2.账号信息

3.脚本列表

3.脚本编辑(哈哈,直接复制的蓝鲸的)

4.作业列表

5.编辑作业(执行脚本)

6.编辑作业(文件传送)

7.作业实例列表

8.作业实例步骤

9.作业实例步骤日志

10.作业实例步骤详情

posted @ 2017-11-28 02:21  黄小雪  阅读(3759)  评论(6编辑  收藏  举报