前言

去年看武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. Qt Read and Write Csv File

    This page discusses various available options for working with csv documents in your Qt application. ...

  2. Entity Framework 6.0 对枚举的支持/实体添加后会有主键反回

    实验 直接上代码,看结果 实体类 [Flags] public enum FlagsEnum { Day = , Night = } public class EntityWithEnum { pub ...

  3. golang之流程控制(注意点)

    Go在流程控制方面特点如下: 没有do和while循环,只有一个广义的for语句 switch语句灵活多变,还可以用于类型判断 if语句和switch语句都可以包含一条初始化子语句 break语句和c ...

  4. macOS 安装设置 Tunnelblick (openvpn 替代)

    1、下载.安装 2、准备好 openvpn 相关的文件,全部放在一个目录中.主要有以下几个: ca.crt client.crt client.key client.ovpn 3、打开 client. ...

  5. jsoncpp学习

    // MyJsonTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <fstream> #includ ...

  6. Mybatis之整体描述

    Mybatis在我看来最大的用处就是封装了jdbc,设置参数操作和获取解析结果集.同时控制了数据库链接等操作,大部分采用了反射来映射javabean对象来进行数据库操作. 1.接下来先整体介绍下主要的 ...

  7. Adobe Photoshop CC 2015安装激活教程

    Adobe Photoshop CC 2015安装激活教程(附序列号) Adobe Photoshop CC 2015是Adobe针对旗下的创意云Creative Cloud 套装推出了2015年年度 ...

  8. Java Float类型 减法运算时精度丢失问题

    package test1; public class Test2 { /*** @param args*/public static void main(String[] args) {   Flo ...

  9. android AlertDialog.Builder(Context context)换行

    今天无意中发现AlertDialog的 setMessage(String)的换行问题,很多人都说\n可以,不过的却原来就在java里面写好的是可以换行 ,但是如果这个string是在网页或者是其地方 ...

  10. Ubuntu 16.04 无人值守自动更新

    https://help.ubuntu.com/lts/serverguide/automatic-updates.html 设置说明 APT::Periodic::Update-Package-Li ...