本文来自网易云社区

作者:李培斌

前言

基于omad部署平台实现一键部署的实践已有很多成功的经验,杭研QA的技术先锋们也在ks圈里有很多不同的文章去阐述关于这类需求的实现和思路,当然包括我们金融事业部QA这边之前也有利用Jenkins+Omad实现一键部署的场景应用,但本次我想体现的基于omad实现一键群组部署、依赖部署功能,这个有别于之前的“一键部署”功能,一键群组部署、依赖部署工具在我们这边已经上线一个月了,目前功能已比较稳定,因此本文主要围绕该工具的实现进行简要的阐述分享。

需求

随着业务的快速发展,业务应用随之增多,每次项目和日常迭代需要部署的应用环境、静态资源、cdn等将近20个,这仅仅是一套环境,对于不同阶段不同环境的部署均会存在重复的情况,比如项目测试环境的一套部署,持续集成环境的一套部署、在线确认环境的一套部署等,由此可知,一个项目的研发过程中投入重复约60次的部署工作已经占用QA很多的时间和精力投入,而且应用依赖的部署只能手工去OMAD平台上一个一个去触发,也降低很多效率,因此我们就会形成一个简单的需求,oamd能否支持一键根据我任意要部署的应用进行批量部署?能否支持应用之间依赖的顺序部署?

基于以上情况的需求点如下:

1、一键批量部署

2、依赖部署

为平台化的实现以上需求功能,同时结合Omad平台现有的功能,需要做如下需求拓展:

a、提供配置化的页面,引入分组的概念,实现一键批量部署功能

b、权限体系维持与Omad一致(个人维度),避免水平和垂直权限紊乱问题

c、应用环境健康状态自动检查,页面实时检查由工具平台触发的部署进度

d、产品、应用、环境、实例的关联关系保持与Omad一致

实现

设计分析

工具使用以下Omad的api接口来获取环境列表信息、一键部署、健康检查、用户信息获取等:

1、/api/cli/ls:获取个人所有的产品、应用、环境及实例的详情信息

2、/api/cli/estatus:获取某个环境状态详情

3、/api/cli/vcchange:修改仓库、分支地址

4、/api/cli/deploy:一键部署

5、/api/cli/login:获取个人token接口

由于Omad平台设计的产品体系是以产品为维度划分,应用、环境及实例均挂靠下不同的产品下,通过产品、应用及环境的组合形式来控制权限访问,一键群组部署和依赖部署工具作为部署的页面化入口,其设计理念和原有平台的方式保持一致,工具平台上也是根据产品、应用、环境、实例,层层挂靠递进的模型设计,如下图

对应的数据传输模型设计,如下图

Omad的接口/api/cli/ls返回的是一个大的json数组串,因此数据流解析时直接将返回的数据进行JSONArray对象化,利用json数组对象去循环遍历出JSONObject对象,以此类推层层递进,直到将最后里层的Instance给解析出来,而后根据数据传输模型组装成前端需要的json串。

交互框架

1、工具平台通过api与omad交互,实现环境数据、部署、健康检查等功能

2、工具平台根据api返回的数据进行不同类型的处理和组装,返回前端页面处理展示

3、群组数据落地至本地的mysql库,为持久化部署提供支持

4、由于环境列表一个非常大的json数组串,每次调用需要处理耗时较久,且个人的环境列表信息变化周期较长,因此该数据做LocalStorage缓存处理,同时提供接口支持手动刷新

5、权限控制维持Omad体系,第一次使用需用户录入AccessKey和AccessSecret,用户唯一的token标识信息缓存至redis,避免多次交互

权限控制

权限控制直接按照Omad原有权限体系来控制,按照个人权限维度做区分,实现从工具平台页面入口的个人产品、应用、环境权限与直接从Omad平台入口保持一致,避免一键群组部署和依赖部署的权限紊乱,引起权限渗透的情况发生。在工具平台这边维护一个用户表,记录录入的AccessKey和AccessSecret信息,以获取用户的唯一标识token信息,从而达到每个用户的权限隔离。

功能展示

操作指导

1、第一次访问工具需要录入OMAD-KEY,或录入的OMAD-KEY信息不正确也需要重新录入

2、选择产品、选择组,添加部署的应用环境信息,其中仓库地址、分支、版本可以为空,为空则表示维持现有的omad配置而不做修改。

3、组状态下的应用环境部署状态是可持续化的,离开页面后重新进去组还是会进行健康检查,若无组化部署,离开后则不再检查应用环境的健康状态。

4、部署失败的应用需要“前往”OMAD平台查看详细的日志,若OMAD在登录情况则直接跳转至对应的应用环境,若未登录则去OMAD登录页面。

5、应用部署过程中,状态会自动刷新。

页面展示

工具现状

一键部署工具已上线一个月时间,现在已接入30几个用户,建立近300个群组,有效触发一键部署次数达200多次,功能逐渐趋于稳定,欢迎大家前来尝鲜。

改进问题

1、组数据的复制功能

2、个人权限隔离后引起的数据不能共用的问题

3、部署进度刷新功能存在局限性,无法完全的实时同步

4、......

邀请

Oamd一键群组部署、依赖部署工具是基于Omad平台而开发的一个测试效率工具,理论上所有接入到omad上进行部署的应用,若有群组部署和依赖部署的需求均可以使用本工具作为部署入口,邀请大家一起来尝尝鲜,同时也给出一些宝贵的意见。

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者李培斌授权发布。

相关文章:
【推荐】 视觉设计师的进化
【推荐】 聊聊空状态设计
【推荐】 知物由学 | 未来安全隐患:AI的软肋——故意欺骗神经网络

Omad群组部署、依赖部署一键解决的更多相关文章

  1. 第七章 手动部署Fisco Bcos 区块链并完成新增群组,在原有群组中新增机构

    鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 目标 1.新增群组搭建完整联盟链 2.根据群组新 ...

  2. Eclipse+Maven构建web项目及部署时Maven lib依赖问题的解决

    目录 Eclipse中m2e插件构建web项目的步骤 Maven工具构建web项目再导入Eclipse的步骤 [一].Eclipse中m2e插件构建web项目的步骤 第一步:创建项目,按照 New – ...

  3. 使用fabric解决百度BMR的spark集群各节点的部署问题

    前言 和小伙伴的一起参加的人工智能比赛进入了决赛之后的一段时间里面,一直在构思将数据预处理过程和深度学习这个阶段合并起来.然而在合并这两部分代码的时候,遇到了一些问题,为此还特意写了脚本文件进行处理. ...

  4. ProxySQL Cluster 高可用集群 + MySQL MGR环境部署 (多写模式) 部署记录

    文章转载自:https://blog.51cto.com/u_6215974/4937192 ProxySQL 在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数 ...

  5. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  6. Kubernetes容器集群管理环境 - 完整部署(中篇)

    接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...

  7. Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,易宝支付,北森等等. kubernetes1.9版本发布2017年12月15日,每三个月一个迭代 ...

  8. [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...

  9. Consul集群版容器化部署与应用集成

    背景 由于公司目前的主要产品使用的注册中心是consul,consul需要用集群来保证高可用,传统的方式(Nginx/HAProxy)会有单点故障问题,为了解决该问题,我开始研究如何只依赖consul ...

随机推荐

  1. BZOJ1002:[FJOI2007]轮状病毒(找规律,递推)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  2. 输出预测边界框,NMS非极大值抑制

    我们预测阶段时: 生成多个锚框 每个锚框预测类别和偏移量 但是,当同一个目标上可能输出较多的相似的预测边界框.我们可以移除相似的预测边界框.——NMS(非极大值抑制). 对于一个预测边界框B,模型会计 ...

  3. php 多种输入参数完整性检查

    说明:(1)输入可能有多重类型的输入,即需要对输入参数进行多次匹配. (2)希望能够返回缺少的参数 代码如下: /** * @param $param 输入参数 (get,post 参数) * @pa ...

  4. C#使用DotNetZip对zip压缩包进行添加删除操作

    参考:http://stackoverflow.com/questions/9855155/how-can-i-delete-a-directory-in-a-zip-file-using-net D ...

  5. v-bind:的基本用法

    1. v-bind:class(根据需求进行选择) <style> .box{ background-color: #ff0; } .textColor{ color: #000; } . ...

  6. Mysql优化实践(分页优化)

    当你和别人都能实现一个某个功能,这时候区分你们能力的不是谁干活多少,而是谁能写出效率更高的代码.比如显示一个订单列表它不仅仅是写一条SELECT SQL那么简单,我们还需要很清楚的知道这条SQL他大概 ...

  7. DataTables.Queryable Sample

    1.DataTables.Queryable的例子项目使用了SQL Server CE数据库,花了几分钟时间转为使用LocalDB. 完整Web.config文件如下: <?xml versio ...

  8. JS异步编程 (2) - Promise、Generator、async/await

    JS异步编程 (2) - Promise.Generator.async/await 上篇文章我们讲了下JS异步编程的相关知识,比如什么是异步,为什么要使用异步编程以及在浏览器中JS如何实现异步的.最 ...

  9. oracle中的事务

     事务 概述:通过sql 对数据库进行操作时,同时执行成功或失败,且数据完整性一致. 链接到oracle的用户(例如plsql或sqlplus)会形成一个session, 此时对数据库的更新操作,不会 ...

  10. 简单几行代码使用百度地图API接口分页获取信息

    首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=426 使用 ...