Omad群组部署、依赖部署一键解决
本文来自网易云社区
作者:李培斌
前言
基于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群组部署、依赖部署一键解决的更多相关文章
- 第七章 手动部署Fisco Bcos 区块链并完成新增群组,在原有群组中新增机构
鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 目标 1.新增群组搭建完整联盟链 2.根据群组新 ...
- Eclipse+Maven构建web项目及部署时Maven lib依赖问题的解决
目录 Eclipse中m2e插件构建web项目的步骤 Maven工具构建web项目再导入Eclipse的步骤 [一].Eclipse中m2e插件构建web项目的步骤 第一步:创建项目,按照 New – ...
- 使用fabric解决百度BMR的spark集群各节点的部署问题
前言 和小伙伴的一起参加的人工智能比赛进入了决赛之后的一段时间里面,一直在构思将数据预处理过程和深度学习这个阶段合并起来.然而在合并这两部分代码的时候,遇到了一些问题,为此还特意写了脚本文件进行处理. ...
- ProxySQL Cluster 高可用集群 + MySQL MGR环境部署 (多写模式) 部署记录
文章转载自:https://blog.51cto.com/u_6215974/4937192 ProxySQL 在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数 ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- Kubernetes容器集群管理环境 - 完整部署(中篇)
接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...
- Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】
k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,易宝支付,北森等等. kubernetes1.9版本发布2017年12月15日,每三个月一个迭代 ...
- [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署
k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...
- Consul集群版容器化部署与应用集成
背景 由于公司目前的主要产品使用的注册中心是consul,consul需要用集群来保证高可用,传统的方式(Nginx/HAProxy)会有单点故障问题,为了解决该问题,我开始研究如何只依赖consul ...
随机推荐
- C/C++心得-面向对象
首先本文以C++描述面向对象.面向对象应该可以说是C++对C最为重要的扩充.面向对象使得C++可以用更符合人的思维模式的方式编程,使得有一定基础的程序员可以更容易的写程序.相对于C,C++还有其他许多 ...
- HDU 1281 棋盘游戏 【二分图最大匹配】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1281 题意概括: 有N*M大的棋盘,要在里面放尽量多的“车”,求最多能放的车的个数,和为了放最多的车有多 ...
- Lambda收集器示例
Collectors常用方法 工厂方法 返回类型 作用 toSet Set 把流中所有项目收集到一个 Set,删除重复项 toList List 收集到一个 List 集合中 toCollection ...
- Msql数据库连接写一个共有的连接工具
为了避免在每一个DAO中都需要自行连接connection,有多个DAO里都需要获取数据库的连接,并且在很多项目中都是一样的数据库连接. 所以就可以把获取数据库连接的代码重构到一个类里. 这样做的好处 ...
- Ajax全局加载框(Loading效果)的配置
在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进 ...
- Spring Bean自动注册的实现方案
这里Spring管理的Bean,可以认为是一个个的Service,每个Service都是一个服务接口 自动注册Service的好处: 1.根据指定的name/id获取对应的Service,实现简单工厂 ...
- 深入浅出爬虫之道: Python、Golang与GraphQuery的对比
深入浅出爬虫之道: Python.Golang与GraphQuery的对比 本文将分别使用 Python ,Golang 以及 GraphQuery 来解析某网站的 素材详情页面 ,这个页面的特色是具 ...
- 解决ssh连接linux系统特别慢的问题
新安装的centos系统,发现ssh连接很慢,因为是测试环境,对安全的要求不高,所以完全可以更快的连接,下面一起来解决这个问题. 一.分析主要原因: 1.SSH的反向DNS解析会消耗大量时间 2.GS ...
- c/c++面试指导---c语法总结
任何一门学科或者专业在学习的过程中都要把握总结框架,大家在面试c/c++职位过程中要应对各种企业的面试,回答企业面试官的各种技术问题.如何应对各种各样的关于c/c++的企业面试题目,从各种繁杂的题目中 ...
- C++分享笔记:5X5单词字谜游戏设计
笔者在大学二年级刚学完C++程序设计后,做过一次课程设计,题目是:5X5单词字谜游戏设计.为了设计算法并编写程序,笔者在当时颇费了一番心力,最后还是成功地完成了.设计中不乏有精妙之处.该程序设计完全是 ...