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 ...
随机推荐
- 七.部署war包到Tomcat(基于Centos安装)
1.把war包上传至tomcat的webapps目录下面 2.启动Tomcat,在Tomcat的bin目录下面,运行startup.sh 3.访问项目,如下成功打开项目
- Linux学习总结(十三)文本编辑器 vim
vim是vi的升级版,会根据文本属性带色彩显示,具体用法如下: 一般模式 : 1.光标定位: 左右移动一个字符, h l上下移动一个字符, k j左右下上 ,左右在两边,下上在中间这样记光标定位行首 ...
- Linux学习总结(六)-su命令 sudo 命令 限制root远程登录
root 用户拥有至高无上的权利,那么我们运维人员是不是直接在root用户下处理所有问题呢? 答案是否定的,权力越大,责任越大,人是会犯错的,因此我们要在不影响我们的工作情况下,尽量限制我们的权力,以 ...
- 5.spring:注解配置 Bean
在classpath中扫描组件 组键扫描:能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定的组件包括: ->@Componment:基于注解,标识一个受Spring管理的 ...
- SpringMVC(1)
1.简要说明: Spring为展现层提供的基于MVC设计理念的优秀web框架,目前主流的框架 Spring3.0以后全面超越Struts2,成为最优秀的MVC框架 Spring MVC通过一套MVC注 ...
- Exhaustive Search
Write a program which reads a sequence A of n elements and an integer M, and outputs "yes" ...
- python-正则基础
正则表达式,说的简单些,就是一个匹配的功能,在python中,只要引用 re 模块,就能进行正则匹配操作 一.math匹配 先来看一个简单的例子 import re re.match(pattern, ...
- Redis通过IO进行序列化+反序列化
必须引用序列化Serializable接口 创建类:Role package com.wbg.springRedis.entity; import java.io.Serializable; publ ...
- js去除空格(trim方法)
/** * 去空格 */ String.prototype.trim=function(){ return this.replace(/(^\s*)|(\s*$)/g, ""); ...
- Nodejs与mysql连接池的应用(pool)
/* * 连接池 连接和缓存的技术 * */ var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit:2 ...