我们是如何实现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上进行开发
福小龙
我们是如何实现DevOps的的更多相关文章
- CI Weekly #10 | 2017 DevOps 趋势预测
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
- DevOps对于企业IT的价值
其实从敏捷延展开的 DevOps 概念很早就已经被提出,不过由于配套的技术成熟度水平层次不齐, DevOps 的价值一直没有有效地发挥出来.现如今,随着容器技术的发展, DevOps 在企业中的实践难 ...
- 给 DevOps 初学者的入门指南
当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念.那么,到底什么是"DevOps"呢? 什么是DevOps 随着软件发布迭代 ...
- DevOps的基本原则与介绍
DevOps的基本原则与介绍 DevOps这个术语是developer与operations的合并简写.实现还有QA.DevOps描述与精简软件交付流程,在今天已经开始广泛的使用.强调从生 ...
- DevOps
DevOps DevOps(英文Development和Operations的组合)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整 ...
- 当DevOps撞上物联网
DevOps 领域在近年来变得流行而普遍.它强调不同的角色之间共同协作,以及如何工作得更加紧密,就像这个词语的词根暗示的那样--开发和运维.但是DevOps和物联网有什么关系? 本文选自<Dev ...
- DevOps是云计算时代的开发与运营
DevOps(英文Development和Operations的组合)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整合.[1] 它 ...
- CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- git review & devops过程
自己搭建的devops环境是gitlab/gerrit/jenkins 1. 首先自己checkout一个自己的代码分支,一般不要在master上做直接修改 2. 修改后git add file, ...
- 【DevOps】DevOps成功的八大炫酷工具
为自动化和分析所设计的软件及服务正加速devops改革的步伐,本文为你盘点了Devops成功的八大炫酷工具 Devops凭借其连接弥合开发与运营团队的能力正在各个行业呈现席卷之势.开发人员和运营人员历 ...
随机推荐
- 苹果电脑中怎么快速卸载Flash Player和浏览器扩展应用插件
Adobe Flash Player是一款轻量级浏览器插件,帮助你在网页浏览过程中享受更广泛的多媒体体验.是一种拓展,与Java一样,成为安全和隐私问题的重要来源.这些都需要手动删除的Flash是令人 ...
- Word1-提取图片文字
1.OneNote # 将图片以图片格式粘贴在OneNote中-右键选择"复制图片中的文本"-粘贴"只保留文本"即可 这种方式识别率较高!!! 2.手机QQ图片 ...
- Nacos安装与启动教程
前言 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计,Nacos基本上支持现在所有类型的服务,例如,Dubbo / gRPC服务,Spring Cloud R ...
- python测试代码
前言: 编写函数或者类时,需要编写测试代码,来保证其的功能运行是否按预期的那样工作.在程序添加新的代码时,用来测试是否会破坏本身的功能. 我们使用python自带的unittest模块来测试代码. 编 ...
- python批量生成SQL语句
1,首先写一条能运行成功插入SQL的语句 INSERT INTO sign_guest(realname,phone,email,sign,event_id)VALUES("jack&quo ...
- 虚拟机VM14.X安装Mac10.12启动出现问题的解决方法
虚拟机安装Mac系统,会出现的问题太多,于是乎变记录下来,方便以后使用或者方便大家解决问题. 一:VM14.X安装Mac10.12虚拟机,启动出现下面无限重启问题 解决方法: 亲测有效 在OS X 1 ...
- Mybatis【1】-- 第一个Mybatis程序
1.框架是什么 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架.前者是从应用方面而后者是从目的方面 ...
- 交换机三种端口模式Access、Hybrid和Trunk
以太网端口有 3种链路类型:access.trunk.hybird 什么是链路类型? vlan的链路类型可以分为接入链路和干道链路. 1.接入链路(access link)指的交换机到用户设备的链路, ...
- python之切片操作,实现一个trim()函数,去除字符串首尾的空格.
# -*- coding: utf-8 -*- def trim(s): if len(s)==0: return '' if s[:1]==' ': return trim(s[1:]) elif ...
- 【GDOI2014模拟】JZOJ2020年8月14日T2 网格
[GDOI2014模拟]JZOJ2020年8月14日T2 网格 题目 Time and Memory Limits Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标 ...