我们是如何做DevOps的?

一、DevOps的理解

DevOps的概念理解

DevOps 的概念在软件开发行业中逐渐流行起来。越来越多的团队希望实现产品的敏捷开发,DevOps 使一切成为可能。有了 DevOps ,团队可以定期发布代码、自动化部署、并将持续集成 / 持续交付作为发布过程的一部分。
一句话概括就是提高生产力,快速交付!

二、引入DevOps的背景

2.1 福禄技术栈介绍

  • 后端开发框架:基于C#的.netCore和Java的SpringCloud,少部分项目采用python和go开发

  • 前端开发框架:vue、react

  • 服务部署:前端站点基于ECS的nginx部署 ,后端服务统一部署在kubernetes上

  • 代码仓库:gitlab

  • 项目环境:目前有6套,开发、测试、压测、集成、PRE和生产

2.2 后端服务的CICD现状


                                                                                                 福禄后端CICD流程

CICD 流程说明

每一次的代码push,根据创建的分支,根据在gitlab的CICD文件gitlab.yml定义构建步骤,触发runner,从单元测试、通过dockerfile进行编译和生成镜像版本、将新镜像部署到K8S生成pod,然后触发接口自动化测试任务的执行

好像缺了点什么?

  • 初次部署应用到kubernetes怎么做的?

  • 服务的configmap在哪里维护的?

  • 每个服务的gitlab.yml文件都不一样,如何维护的?

  • 应用的域名解析怎么做?

目前有6套环境进行管理,其中开发、测试、集成、压测都是测试人员维护,预发布和生产运维人员维护;这也就要求每一个测试人员都必须对整个cicd流程和配置绝对掌握;所以当新人入职,需要掌握整个流程才能进入项目测试中,这是一个学习成本;

预发布和生产的kubernetes只有运维能够操作,当有新的服务需要上线上述环境,或者configmap有变动,或者有时候排查问题需要查看容器日志,我们只能通过运维的工单系统描述作业操作,中间文字描述可能存在理解差异,沟通成本和时间成本很大;

有的新应用我们去设置cicd的相关文件,比如dockerfile,我们发现应用的代码目录结构各种各样,这样往往就没法套用一个模板快速配置完成

2.3 前端站点的CICD现状

前端CICD流程说明

开发人员push代码到gitlab,测试人员通过jenkins拉取最新的代码到jenkins本地,然后通过jenkins与服务器之间的传输管道,将要部署的文件更新到目标服务器,并触发UI自动化的job

完整的过程来看,也缺点内容

  • 一个新的站点部署,nginx需要做一些配置初始化工作,比如域名、路径的配置

  • 前端的配置文件是如何管理的

跟后端应用一样,前端的PRE和生产环境也是运维处理,所以当一个新的应用上线我们也需要发工单,描述具体操作,然后运维执行工单;配置文件一般不会变更,所以我们在jenkins推送更新文件到目标服务器的时候,将配置文件做了过滤处理。后续需要变更通过工单执行

2.3 痛点你看到了吗

2.3.1 安全管控缺位
  • 代码安全:CICD的起点在gitlab里面,所以大家都有gitlab的账号,代码安全管控缺位

  • 线上安全:线上项目部署也是通过gitlab的cicd直接触发,审批流程缺失

2.3.2 管理成本
  • 维护账号多:gitlab账号、jenkins账号、kubernetes账号(本地和阿里云),每一个人员都需要上述账号,运维管理麻烦,大家每个平台维护自己的账号也麻烦

  • 工单沟通:工单编写、沟通过程花费时间较多

  • 代码规范:项目组多,微服务也多,代码框架各自发挥,无论是流程维护还是问题排查都增加了难度

三、研发管理平台(RDMS)应运而生

3.1 如何理解这个平台

工具链到平台的转变

当前的cicd是对工具链进行了打通,但需要大家登录各个工具平台操作,我们希望对工具集进行功能整合,打造一个系统平台,并且将CICD的技术细节进行屏蔽,开发人员能够专心进行业务需求的开发,测试人员能够专注到需求测试任务中,而运维人员能够解放繁重的工单内容,投入到服务高可用的建设上!

3.2 业务功能设计


                                                                                                                                  福禄研发管理平台功能结构图

3.2.1 功能说明
  • 项目管理:项目的创建和维护,默认提供了.netcore的api和控制台,java的api和前端站点的应用初始化代码框架,开发人员开发新的应用直接根据应用类型选择对应的模板就可以在git默认创建代码仓库和初始化框架代码,并自动生成应用的http和https的域名

  • 构建记录:获取gitlab的pipeline,展示所有分支的构建记录信息,可以一键跳转到git仓库

  • 部署管理:部署构建的镜像到指定的环境,提供实时部署和定时部署功能

  • 容器管理:提供容器的查看功能,可以看到容器的存活状态和容器实时日志

  • 配置字段权限申请:针对PRE和生产环境查看配置,需要先走钉钉审批申请流程

  • 配置信息:进行配置的维护,包括新增、编辑、删除,PRE和生产环境操作需要钉钉流程审批

  • 操作日志:针对应用的操作日志记录

  • 用户设置:在使用rdms前,需要先将用户git仓库的token设置在rdms上,这样用户在rdms操作与gitlab相关的业务才能正常使用

3.2.2 RDMS几个核心页面的展示

首页-创建应用

构建记录

部署管理

容器管理

3.3 技术架构

对接系统的说明

  • 通行证:RDMS的目标用户是研发中心人员,这些人员在通行证中都有默认的账户信息,与通行证打通,可以直接登录使用

  • GitlabAPI:目前RDMS的CI还是采用的gitlab的ci支撑,包括新应用在rdms的创建到git仓库的代码初始化等,都需要调用gitlab的api接口

  • 钉钉flow:安全管控的原因,PRE和生产的任何操作都会触发钉钉审批流,所属项目的项目经理审批通过后才会获取到数据或者执行操作指令

  • 福禄开放平台:提供了网关相关的功能和菜单、角色等维护功能,公司所有后端服务都需要入驻开放平台

  • 蜂巢:公司的调度作业平台,rdms的定时部署功能依赖该服务的支撑

  • 运维工单系统:rdms的CD流程没有直接与kubernets进行交互,而是通过运维的工单系统包装了运维底层的shell脚本层,然后提供给rdms相关的api接口,也是基于安全控制的考虑

  • shell脚本层:shell脚本层会调用kubernetes的api进行kubernetes的相关操作(部署、配置更新、容器重启、日志查看等);调用阿里云的dns解析接口,对应用的域名自动解析;调用oss的接口,进行前端站点文件目录的维护

3.4 后端应用的devops实现详解

举个栗子进行介绍

根据模板,创建一个应用

根据名称默认生成域名

初始化代码仓库,默认生成develop分支


在rdms第一次部署到对应环境(开发、测试、生产等)时,会默认读取appsettings.Development.json的文件,并写入kubernets的configmap

构建完成,进行部署

在kubernets生成pod

通过域名访问接口文档

3.5 前端站点的devops实现详解

同样的,举个栗子介绍

首页-创建前端站点

根据名称生成域名

初始化代码仓库,默认生成develop分支

配置文件,默认生成几套环境的配置文件,站点的配置维护就是维护这几个文件


部署应用

kubernetes的nginx容器内可以看到部署的文件,实际就是挂载的oss到该pod上

四、展望

目前RDMS投产一个月左右,我们希望能将devops理念在这个系统上进行持续的优化和实践,包括研发中心小伙伴也很踊跃参与共建,提出了很多好的方向和建议

  • 完善devops链条功能:通过字面来看有dev、ops两部分,我们后期需要加入test的比重,比如在CI部分,引入静态代码扫描、单测覆盖率;在CD部分集成我们的自动化测、性能测试

  • 工具平台:RDMS的初衷是整合,针对研发中心经常使用的工具或者有相关工具化的需求,我们可以整合到rdms或者在RDMS上进行开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word文档相关使用

主要是为了记忆,有的时候,之前查阅过,后来使用又忘记了,以后碰了就陆续添加吧,先开一个博文 文章目录插入图片,显示不全的问题:方法一:方法二:方法三:在左侧显…

[JavaWeb-XML]XML概述

XML&#xff1a; 1. 概念&#xff1a;Extensible Markup Language 可扩展标记语言* 可扩展&#xff1a;标签都是自定义的。 <user> <student>* 功能* 存储数据1. 配置文件2. 在网络中传输* xml与html的区别1. xml标签都是自定义的&#xff0c;html标签是预定义。…

调试实战 —— dll 加载失败之 Debug Release争锋篇

缘起 最近&#xff0c;项目里遇到一个 dll 加载不上的问题。实际项目比较复杂&#xff0c;但是解决后&#xff0c;又是这么的简单&#xff0c;合情合理。本文是我使用示例工程模拟的&#xff0c;实际项目中另有玄机&#xff0c;但问题的本质是一样的。本文从行文上与 《调试实战…

汉诺塔 X HDU - 2511

题目&#xff1a; 1,2,…,n表示n个盘子&#xff0e;数字大盘子就大&#xff0e;n个盘子放在第&#xff11;根柱子上&#xff0e;大盘不能放在小盘上&#xff0e;在第&#xff11;根柱子上的盘子是a[1],a[2],…,a[n]. a[1]n,a[2]n-1,…,a[n]1.即a[1]是最下面的盘子&#xff0e;…

[JavaWeb-XML]XML基本语法与快速入门

语法&#xff1a; * 基本语法&#xff1a;1. xml文档的后缀名 .xml2. xml第一行必须定义为文档声明3. xml文档中有且仅有一个根标签4. 属性值必须使用引号(单双都可)引起来5. 标签必须正确关闭6. xml标签名称区分大小写示例代码如下: <?xml version1.0 ?><users>…

Beetlex.Redis之Stream功能详解

有一段时间没有写文章&#xff0c;techempower的测试规则评分竟然发生了变化&#xff0c;只能忘着补充一下占比权重最多的数据更新示例了和深入设计一下组件模块化加载的设计。但在不久前有用户问了一下组件是否支持redis的Stream功能&#xff0c;看了一样相关资料后把功能实现…

一文说通Dotnet Core的后台任务

这是一文说通系列的第二篇&#xff0c;里面有些内容会用到第一篇中间件的部分概念。如果需要&#xff0c;可以参看第一篇&#xff1a;一文说通Dotnet Core的中间件一、前言后台任务在一些特殊的应用场合&#xff0c;有相当的需求。比方&#xff0c;我们需要实现一个定时任务、或…

[JavaWeb-XML]XML组成部分

组成部分&#xff1a; 1. 文档声明1. 格式&#xff1a;<?xml 属性列表 ?>2. 属性列表&#xff1a;* version&#xff1a;版本号&#xff0c;必须的属性* encoding&#xff1a;编码方式。告知解析引擎当前文档使用的字符集&#xff0c;默认值&#xff1a;ISO-8859-1* st…

2021年度训练联盟热身训练赛第五场 H题In-place Sorting+贪心构造

题意&#xff1a; 给你n个小于101810^{18}1018的大数&#xff0c;问在可以再不改变序列位置&#xff0c;之改变数值中某数位的‘9’变为‘6’或将‘6’变为‘9’&#xff0c;求的最终序列由小到大&#xff0c;且字典序最小。 题目&#xff1a; 链接&#xff1a;https://ac.n…

用.NET进行客户端Web开发?看这个Bootstrap风格的BlazorUI组件库

点击上方“Dotnet9”添加关注哦Blazor一、前言今天在下班的路上&#xff08;地铁上&#xff09;&#xff0c;站长习惯性的掏出手机&#xff0c;就收到知乎向站长推送的一篇BlazorUI组件库推荐文章&#xff0c;是码云官方的&#xff1a;原文链接[1]&#xff0c;于是我立即打开码…

2021年度训练联盟热身训练赛第五场F题Group Project

题意&#xff1a; 有n个人&#xff0c;其中有m组&#xff0c;两两互斥&#xff0c;现在要分成两个班&#xff0c;但最终求的确是最多有多少对不互斥的。 题目&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/16741/F 来源&#xff1a;牛客网 The big day…

[JavaWeb-XML]XML约束概述

约束&#xff1a;规定xml文档的书写规则 * 作为框架的使用者(程序员)&#xff1a;1. 能够在xml中引入约束文档2. 能够简单的读懂约束文档* 分类&#xff1a;1. DTD:一种简单的约束技术2. Schema:一种复杂的约束技术

在Asp.NET Core中如何优雅的管理用户机密数据

在Asp.NET Core中如何优雅的管理用户机密数据背景回顾在软件开发过程中&#xff0c;使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法。在早期VB/VB.NET时代&#xff0c;经常使用.ini文件来进行配置管理&#xff1b;而在.NET FX开发中&#xff0c;我们则倾向…

食物链 POJ - 1182

题目&#xff1a; 动物王国中有三类动物A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A吃B&#xff0c; B吃C&#xff0c;C吃A。 现有N个动物&#xff0c;以1&#xff0d;N编号。每个动物都是A,B,C中的一种&#xff0c;但是我们并不知道它到底是哪一种。 有人用两种…

[XML-Jsoup]Jsoup_解析_快速入门

xml常见的解析器&#xff1a; 1. JAXP&#xff1a;sun公司提供的解析器&#xff0c;支持dom和sax两种思想2. DOM4J&#xff1a;一款非常优秀的解析器3. Jsoup&#xff1a;jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

计蒜客 逃生+动态规划

题目&#xff1a; 蒜头君在玩一款逃生的游戏。在一个 nmn \times mnm 的矩形地图上&#xff0c;蒜头位于其中一个点。地图上每个格子有加血的药剂&#xff0c;和掉血的火焰&#xff0c;药剂的药效不同&#xff0c;火焰的大小也不同&#xff0c;每个格子上有一个数字&#xff0…

[XML-Jsoup]Jsoup_对象的使用(Jsoup工具类,Document,Elements,Element,Node)

对象的使用&#xff1a; 1. Jsoup&#xff1a;工具类&#xff0c;可以解析html或xml文档&#xff0c;返回Document* parse&#xff1a;解析html或xml文档&#xff0c;返回Document* parse​(File in, String charsetName)&#xff1a;解析xml或html文件的。* parse​(String ht…

别了,Docker Swarm !你好,K8s !

毫无疑问&#xff0c;Kubernetes已经成为容器编排事实标准。除了已经拥抱Kubernetes的Google、BAT、京东、奇虎360等巨头大厂外&#xff0c;更多的企业也都在向Kubernetes迁移。容器技术大势所趋&#xff0c;是互联网企业目前急需的技术人才之一&#xff0c;已成为运维工程师、…

01背包+概率问题 计蒜客 offer

题目&#xff1a; 蒜头君很早就想出国&#xff0c;现在他已经考完了所有需要的考试&#xff0c;准备了所有要准备的材料&#xff0c;于是&#xff0c;便需要去申请学校了。要申请国外的任何大学&#xff0c;你都要交纳一定的申请费用&#xff0c;这可是很惊人的。蒜头君没有多…