前言

去年看武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(执行账户):存放在每台机器上执行的账户

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

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.作业实例步骤详情

基于python复制蓝鲸作业平台的更多相关文章

  1. 什么?studio3T试用期到了,还没有破解的办法?试制基于python的mongodb CRUD平台

    首先,安装python支持的mongodb库pip install pymongo from pymongo import MongoClient client = MongoClient('loca ...

  2. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  3. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  4. 基于python自动化测试平台与虚拟化技术结合的思考

    背景: 自动化测试行业内,个人觉得主力语言是python.java.这里讨论下基于python自动化框架设计与case开发,用过python的都知道它的好处,但是根据实际项目需要有了很多迎面而来的困难 ...

  5. 【airflow实战系列】 基于 python 的调度和监控工作流的平台

    简介 airflow 是一个使用python语言编写的data pipeline调度和监控工作流的平台.Airflow被Airbnb内部用来创建.监控和调整数据管道.任何工作流都可以在这个使用Pyth ...

  6. 基于datax的数据同步平台

    一.需求 由于公司各个部门对业务数据的需求,比如进行数据分析.报表展示等等,且公司没有相应的系统.数据仓库满足这些需求,最原始的办法就是把数据提取出来生成excel表发给各个部门,这个功能已经由脚本转 ...

  7. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  8. 基于python的互联网软件测试开发(自动化测试)-全集合

    基于python的互联网软件测试开发(自动化测试)-全集合 1   关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...

  9. Kubernetes - 腾讯蓝鲸配置平台(CMDB)开源版部署

    蓝鲸CMDB 蓝鲸配置平台(蓝鲸CMDB)是一个基于运维场景设计的企业配置管理服务.主要功能: 1. 拓扑化的主机管理:主机基础属性.主机快照数据.主机归属关系管理 2. 组织架构管理:可扩展的基于业 ...

随机推荐

  1. Windows Python 2.7环境搭建

    一.安装及修改环境变量 我安装的版本是python-2.7.15.amd64,因为2.7.9之后的版本都会安装好pip.将Python执行文件所在文件夹加入path路径,C:\Python27.将pi ...

  2. rabbitmq的延迟消息队列实现

    第一部分:延迟消息的实现原理和知识点 使用RabbitMQ来实现延迟任务必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求. 消息的TTL(Tim ...

  3. 一些json在js和c++ jsoncpp的操作

    1.对于javascript部分,如果将字符串转为json对象? var aa ={ keyword:"zoumm", requestcount:"5", ne ...

  4. typedef char int8; 这样定义的好处?

    用typedef定义int8代表char:然后用int8去定义其他变量.一旦系统中char不再是占8位的数据时,可重新typedef新的占8位的类型为int8,而所有的用int8定义的8为类型数不用再 ...

  5. Oracle学习笔记(十)

    光标(游标)概念引入 就是一个结果集(查询或者其他操作返回的结果是多个时使用)定义一个光标 cursor c1 is select ename from emp: 从光标中取值 打开光标: --ope ...

  6. Restful风格wcf调用3——Stream

    写在前面 上篇文章介绍了restful接口的增删改查,本篇文章将介绍,如何通过数据流进行文件的上传及下载操作. 系列文章 Restful风格wcf调用 Restful风格wcf调用2——增删改查 一个 ...

  7. awk基础03-分支和循环语句

        awk既然是一门解释型语言,则就可以支持如分支语句.循环语句等.今天就来学习一下在awk中的分支和循环语句.如果您有过任何一门编程语言的基础,则下面所讲内容也是很好理解的. 分支语句 if-e ...

  8. Image 和byte[]之间的转换

    1.Image 转 byte[] public byte[] GetByteByImage(Image image) { byte[] bt = null; try { if (!image.Equa ...

  9. ZOJ3770Ranking System 2017-04-14 12:42 52人阅读 评论(0) 收藏

    Ranking System Time Limit: 2 Seconds      Memory Limit: 65536 KB Few weeks ago, a famous software co ...

  10. Metasploit学习指南—基础篇

    Metasploit是一款强大的渗透测试平台,其中包括了很多渗透测试利器,本文简单介绍一下Metasploit的配置和基础的使用方法,主要包括以下几个方面: Metasploit的核心 基础的配置 M ...