前言

去年看武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;

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. 22.Generate Parentheses (String; Back-Track)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  2. JS如何判断浏览器类型,如何模拟浏览器类型(模拟微信浏览器)

    一.前言 在编写前端代码时,为了页面兼容性,我们往往需要考虑不同的浏览器类型 而这就需要在前端代码中进行识别和区分 接下来就来谈谈对浏览器类型的识别 二.正文 (一).查看浏览器类型的核心代码 var ...

  3. ampify shader工具学习一

    如何使用lambert Amplify Shader Editor 1.5.3 高级shader编辑工具 2018_5 点击下载

  4. SVG DOM常用属性和方法介绍(1)

    12.2  SVG DOM常用属性和方法介绍 将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析 ...

  5. Java方法_数组

    /* 方法:完成特定功能的代码块.   注意:在很多语言里面有函数的定义,而在Java中函数被称为方法.   方法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { ...

  6. 看图说话:关于BI那点事儿

    [编者按]BI=DW+数据挖掘+业务分析+社会学?BI三部曲:管数据.看数据.源数据.BI有三种放法:技术部.业务部和独立部门.BI的工作=20%数据平台+30%数据支持+50%数据应用.  

  7. Uploadify多文件上传插件.NET使用案例+PHP使用案例

    ploadify是一个非常好用的多文件上传插件 插件下载:http://www.uploadify.com 下载后需要用到的文件: 接下来就是直接添加代码: Default.aspx代码 <%@ ...

  8. iOS隐藏导航条1px的底部横线

    第二种方法:1)声明UIImageView变量,存储底部横线 @implementation MyViewController { UIImageView *navBarHairlineImageVi ...

  9. [翻译] Writing Property Editors 编写属性编辑器

    Writing Property Editors 编写属性编辑器   When you select a component in the designer its properties are di ...

  10. ASP.NET:邮件服务器与客户端

    目录: 一.概述 二.MX设置 三.使用系统的SMTP功能发邮件 四.使用hMailServer收发邮件 五.Web邮件客户端 一.概述 首先必须清楚SMTP才是提供邮件服务器的核心,收发邮件全靠SM ...