DevOps实践分享:4个实施步骤与6个关键设计

news/2024/5/7 16:29:20/文章来源:https://blog.csdn.net/weixin_45443931/article/details/130120540

11e71e240e39d20f6040d945b25a0fd7.jpeg

本文介绍了普元DevOps平台在金融行业实施落地的常用方法,以及在项目管理,代码管理,构建管理,制品管理,部署管理等模块针对一些典型客户场景的关键设计。

目    录

01 平台简介‍‍

02 实施方法‍‍‍‍‍‍

03 关键设计

01

平台简介‍

1.  普元DevOps定位

b94e72aa0bd2286b59185285d463ad6a.png

普元DevOps平台以质量和安全为基础支撑保障,通过工程化的手段,打造一条覆盖从需求到研发、测试、部署、运维的软件生产全周期的IT生产线,帮助企业提升IT系统研发效率,快速响应业务需求,并通过度量分析、风险预判,持续提升IT运营能力

2.  普元DevOps集成‍‍‍‍‍‍‍‍‍‍‍‍

baed301d42c2a77cc0d0271f1ae184eb.png

既然要实现软件研发的全生命周期的管理,自然不可避免需要对企业软件研发交付的各个阶段进行一些集成方面的工作。这里从纵向和横向两个维度来看。

横向的话实际上是从全生命周期过程中,整个软件从需求提出,到研发测试,到最终上线,它涉及到了不同部门和角色,不同人员之间的一些协作。横向主要是为了打通跨部门,不同职责的人员之间的壁垒,通过流程驱动的方式,让各部门能高效的协同合作。

纵向维度主要是从软件需求的管理,项目过程的管理,开发代码的管理,测试过程的管理,到后续持续集成和持续发布,再到验证及最终上线,会涉及到不同的工具链。纵向主要是为了打通了工具链的串联,以实现数据和流程的打通。

3.  普元DevOps价值‍‍

6c5ba60a3d61bfc5235625a134ee79c8.png

在通过集成过程打通各部门壁垒,打通工具链串联之后,最终实现数据和管理流程的打通。同时通过度量的方式帮助管理者进行过程的优化,这是我们的一个最终目标。

我们在DevOps在实施过程中通过解决如下问题以创造客户价值。

管理前移:通过流程数据的打通,可以提前感知项目存在的风险,项目进度是否有延迟,质量与预期的目标是否有偏差,帮助管理者能更早的发现问题并介入处理,以便能更早的规避风险。

全链路追溯:通过数据流程的打通建立从工作项-代码-构建-制品-发布-实例运维的一整条链路信息。以便发现问题时能很方便的进行链路追溯和问题排查。

量化评估:打通流程和数据之后,可以基于报表相关数据对各个阶段的工程效率进行度量,也能更好进行资源分配。同时可以更准确评估完成需求需要的时间,以便合理的制定开发计划。

自主掌控:对代码源头,编译过程,发布过程进行管控。

多架构适配:支持各种技术栈应用的编译,编译环境管理,支持不同的中间件应用发布。在一个统一的平台上形成完整的资产和信息链。屏蔽一些差异化,通过相对标准的配置就能进行管理。

驱动协同:这里不仅仅是开发和运维了,它是完整的,从需求,开发,测试,运维。并涵盖质量与安全。这也就是之前提到的横向打通部门之间的壁垒,实现高效的驱动协同。

02‍

实施方法‍‍

1. 实施过程总览

4caef6f0df86bf3f4eef2f350c889d46.png

通常,会将DevOps实施过程分成如下四个步骤

调研分析:‍‍

1)  组织级现状调研

基于需求范围对企业IT管理流程和规范进行调研,如项目管理,需求任务拆分,缺陷管理,应用提测及投产流程,代码库分支管理策略等。同时,需要对企业的网络架构及管理规范进行调研,结合企业已有平台(代码库,制品库等)部署情况,合理的设计DevOps平台的部署架构。

2)  试点选择与调研

 试点项目选择需要基于企业应用特点,选择最具有代表性的项目(应用架构具有普遍性,如微服务项目等)。根据试点项目应用类型梳理接入DevOps关键问题点并进行调研。

3)  范围梳理

根据上述调研的情况编制调研分析报告,结合需求范围与调研的结果合理的规划后续的实施范围及方案。

制定方案:

1)平台部署方案

根据之前的调研情况以及与运维的沟通,制定平台的部署架构。梳理需要部署的应用以及资源信息(主机资源或云上资源信息,高可用,存储,CPU,内存等),以及应用之间的交互方式及端口,以便开通网络策略。

2)技术验证

搭建完平台环境之后可以进行试点项目应用的验证,试点项目工程的CI,CD验证等。

3)平台建设方案

在技术验证的过程中,同步梳理项目的建设目标,集成方案(单点登录,应用服务器,容器云等)。

实施落地:

1)建立规范

根据试点项目的应用类型,梳理对应该类型应用的CI,CD相关规范,结合代码库管理规范与制品管理规范等配置对应的流水线模板,建立对应的最佳实践。

2)平台定制

在验证过程中,根据情况扩展工具集。基于需求范围同步完成其他如单点登录,容器云等平台的集成开发。

3)试点接入

在建立对应应用类型的最佳实践之后开始对同类型项目试点进行宣贯和培训,以便能够快速接入。

运营推广:

1) 实施推广

建设推广运营团队,制定平台运营推广指南,建立标准规范体系,提供技术支撑,加强项目组的能力建设。

2)持续优化

在推广过程中持续与项目组沟通,获取反馈信息,持续优化DevOps平台。

2. 落地方法与策略

745bcbb3c0158873ed3128436ef1fbd2.png

迭代演进

DevOps建设不可能一蹴而就,需要结合平台特点、项目需要、以及企业自身的组织能力,形成阶段性目标,采用迭代演进的方式,有重点分步骤的建设。每次迭代必须有明确目标、工作清单、交付物。

自主掌控

在DevOps建设过程中,需要重视企业自身IT队伍的培养,确保自主掌控,实现人员能力和组织能力的双落地。IT部门应该深度参与项目实施过程,与DevOps实施人员共同组成团队,承担具体的实施任务以及后续的运营推广。

03‍

关键设计‍‍‍‍‍‍‍

1. 项目管理‍‍‍‍‍

工作项概念模型‍

2bd9e843a6ea464dcdff2508b2aa3c11.png

1969c6a015f05250d3fdd22c52b1b214.png

我们将不同的项目管理模式定义成不同的项目模板。项目模板包含人员角色模板,菜单模板和工作项方案等

Ø  角色模板

人员角色模板定义了一类项目管理模式中涉及到的人员角色。不同的人员角色有不同的权限配置。如项目中有项目经理和需求分析员等人员角色。系统中有系统开发负责人,开发人员,测试人员,配置管理员,运维人员等角色。

Ø  菜单模板

菜单模板定义了一类项目管理模式中涉及的功能菜单。如系统下对应用程序做构建和部署,生产上线也是以系统为单元。在项目下不进行构建和部署则不需要对应功能菜单。

Ø  工作项方案

工作项方案定义了一类项目管理模式中涉及到的工作项管理。如项目中需要对业务需求拆分的需求条目进行管理,系统下需要对条目拆分的系统需求,开发任务,缺陷等工作项进行管理。不同工作项对应的页面及属性也不同,工作项状态流转过程也不同。

项目模板的能力用以应对企业项目管理的差异化需求。同时借助项目之间关联的能力实现项目与系统的关联以及跨项目的工作项拆分。

2. 代码库管理

af05855c6814e9fe639608b680ce5a14.png

通常,代码库按系统分组,系统下的每一个工程都有一个或多个独立的代码库,它们通常独立的进行编译和部署。

如scm系统下的lmp工程前后端独立开发部署:scm/lmp-portal.git,scm/lmp-server.git。

代码分支策略-多分支并行

f432c5cf719add8f4969f2732ee00036.png

这是一个代码分支管理策略的示例(系统存在多个项目的需求并行开发,测试,上线):

客户需求:

Ø  既希望版本可控,又希望简化项目组工作量。

Ø  单项目多批次上线:同一个项目可能分多个批次上线。

Ø  系统下多项目并行开发:开发、测试和投产都是按项目管理,但为了简化运维工作,希望在同一天上线的多个项目合并投产一次。

Ø  计划调整:计划上线的特性可能临时调整,不上线的代码不投产。

大家也能看出如上第四点中计划上线的范围变更所带来的问提,系统下工程存在多个项目的需求并行开发,同时规划好要投产的代码要提前进行合并测试。

但临上线之前的范围变更,并没有足够的时间进行重新合版测试。最后的结果只能是投产的版本与测试的版本不能完全一致。

在面对这种问题我们都会解释这种临时的变更是不合理的,是不符合管理规范的。但这么显而易见的问题,客户又怎么会不知道。只是日积月累,有些问题很难一下子就改变,但在当下要做的是结合已有的能力尽可能的去规范化,去简化这些流程。

代码提交规范

727906bb653bb071bbe5e153a6c807ad.png

通过代码提交和任务关联的方式,可以解决代码库策略中的部分问题,如基于系统需求去筛选代码进行cherry-pick。

我们提供了Eclipse和IDEA的插件,开发人员可以在开发工具上就能处理自己的开发任务。同时提交代码时可以选中代码对应的开发任务,这样会自动生成代码提交的信息,并将代码提交记录与工作项任务关联。这样在系统需求和任务中就能看到提交代码的记录。

3. 构建管理

最佳实践-应用构建模板

edebd8bf6ae09d3d6f76cb5c3427f020.png

DevOps提供了涵盖代码,工具,构建,部署,测试等类型共计80+个原子任务,同时提供了动态表单加静态脚本扩展原子任务的框架以满足企业持续集成和持续部署的需求。

针对企业不同的应用类型,我们通过原子任务的编排配置及参数抽离建立了不同的应用构建模板,以供同类型应用可以导入执行,以达到统一规范,建立应用构建最佳实践的目的。

最佳实践-云上构建

fef5af1879505ae02bee7555586c3bdb.png

云下构建过程中,如果存在系统公用引擎的情况,可能会产生一些问题。如一些构建工具的多版本及全局配置问题(编译环境隔离)。

DevOps平台提供了构建引擎节点在云上动态扩展的能力,可以实现节点按需扩展(一个构建任务对应一个pod)。

我们根据微服务应用编译用到的原子任务,去配置pod template,pod template中包含了微服务应用所用到工具的容器,同时包含一个额外与jenkins master交互的jnlp容器。在微服务应用执行构建时,会自动调用云环境,用pod template中定义的容器配置去创建对应的pod来执行整个构建过程。

4. 制品管理

制品库管理

ce7fdd87a262cf50846a23a047916c59.png

除了制品库管理需求,企业本身还有自己的三方库管理,通常会使用代理外网或离线同步的方式管理第三方依赖。同时会使用独立的库管理企业自身产出的一些依赖。

制品库一般按系统和环境划分,不同的环境使用不同的库,通常区分开发,测试,投产库。开发,测试库制品通过编译产生,生产库制品通过测试库中测试通过的制品晋级获取。

制品目录结构

296475ffa2ebd3884fcf111fee11909d.jpeg

除了按环境分库管理,对制品目录也会建立规范要求。如在测试环境和生产环境使用基线(投产窗口)作为一级目录(测试环境可以加上提测次数标记)。

基线下可以按应用模块划分,每个应用模块都应该是一个独立部署的单元。

config目录存放变更的配置,app目录存放变更的应用程序包,data目录存放变更的数据包(如升级sql,回滚sql等)。

制品元数据

cd0833e1a52afd0332c8fe89f78922b1.png

通过关联对象的打通我们基于制品汇总了关联信息,同时我们在多个功能模块中都可以对全链路信息进行追溯。

Ø  工作项:可以查看制品中新增部分所对应的需求,任务以及修复的缺陷等。

Ø  代码库:可以查看制品对应的代码库,分支,commit等信息。

Ø  构建:可以查看制品是从那个构建定义的那一次执行产生的。

Ø  发布:可以查看制品是否已经被部署到具体的环境。

Ø  质量:可以查看制品的代码扫描的结果信息。

Ø  依赖:可以查看制品的第三方依赖及其license信息。

Ø  安全合规:可以查看制品中依赖的漏洞信息和license合规(不允许商用等)信息。

制品晋级

7fc960db895321c7ae336bddab8a120d.png

质量和安全在整个软件研发全生命周期中是无处不在的。因此对于检测的执行过程是可以分散在不同的功能模块中,但管控不应该是分散的,我们应该基于特定的管理流程对我们需要执行的检查结果进行统一管控。

Ø 质量配置:

指标管理:对不同工具的检查结果指标要求进行定义。

策略管理:检查结果校验的后处理逻辑,如邮件通知,自动创建缺陷,工单审核等。

清单管理:汇总指标和策略配置并与具体的系统进行关联。

Ø 数据关联(建立检查结果数据与制品关联):

代码扫描:代码检查的结果信息。

制品扫描:制品依赖的漏洞和license合规的信息。

容器扫描:容器扫描的漏洞信息。

自动化测试:测试环境自动化测试的结果信息。

Ø 统一管控(在制品晋级流程中基于质量和安全检查结果信息进行管控):

晋级申请:测试通过的测试制品库基线目录发起晋级到生产库的流程。

晋级审批:基于质量配置指标自动检测制品关联的结果信息,也可触发人工检查流程。

5. 部署管理

部署流水线配置

d4137db4ab02fac780b2ce3354de372a.png

同构建一样,部署也是采用的原子任务编排的方式实现,如一个发布流水线用到数据库备份,数据库脚本执行,websphere应用部署等原子任务来实现应用及其数据的备份和部署。

应用部署原子任务示例

fdd70f831f2789d54bce581783d1f448.png

这是一个websphere应用部署原子任务的例子。主要想说明的是部署不单单只是一个部署脚本的执行,我们会有针对应用发布的一些流程进行管控,如全量部署,增量部署,应用备份,应用回滚等。

应用部署规范

ca3caf5f8db9bc3077b6017360737893.png

基于平台提供的能力,根据应用部署的规范要求,通过流水线配置将同一类应用的部署过程模板化,并保证不同环境基础设施的一致,这样才能保证同一条流水线在不同环境中都能正常使用。

6. 生产发布

平台部署方案

4cd06ba746ca6af8404ea0924f101ab3.png

一套平台的部署方案相对简单,通常会将平台部署到生产,然后打通到开发测试点对点的网络即可。

但部分企业对生产环境的网络打通有严格的管控,同时运维人员使用的平台需放到独立的环境中。上图就是两套DevOps环境,使用单向数据同步的部署方案。打通生产DevOps单向访问测试区DevOps的网络,用以同步所需的关键数据,如项目,系统,流水线等。打通生产制品库单向访问测试区DevOps的网络,用以同步生产发布所需的制品。

80fe3244461b513c60ead61b72f491ee.png

投产管理

1eb51591946518deeb27e018be666a96.png

同开发测试环境部署不同,生产发布通常是在固定投产日对当天上线的系统进行统一的生产环境部署。DevOps平台提供了独立的投产管理的功能。

投产管理功能包含投产窗口管理,投产系统管理,投产系统部署执行及跟踪的能力。

Ø 投产窗口:对提前规划投产窗口进行批量导入,同时支持添加临时投产创建。

Ø 投产系统:系统投产计划关联投产窗口,支持查看系统的投产责任人,迭代或版本信息,投产时间等,支持维护系统的投产状态。支持查看投产日投产进度。

Ø 投产发布:支持查看制品基线,投产清单,流水线等信息,支持手动或定时执行发布流水线,支持对执行过程进行跟踪。

57af1074abf9333c46b99c29c6500d48.jpeg关于作者:子康,普元数智研究院资深顾问。曾参与多个DevOps项目,主要负责项目实施工作。开源技术爱好者,擅长云计算,容器,DevOps等相关领域技术。

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

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

相关文章

OceanBase 4.1 发版 | 一个面向开发者的里程碑版本

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 2022 年 8 月,OceanBase发布了 4.0 版本(小鱼),作为业内首个单机分布式一体化架构,兼顾了分布式架构的扩展性和集中式架构的性能优势&…

算法:链表和数组哪个实现队列更快

背景 对于这个问题,我们先来思考一下数组和链表各有什么特点。 数组:连续存储,push 很快,shift 很慢。 链表:非连续存储,add、delete 都很快,但是查找很慢。 所以,我们可以得出结论…

TCP/UDP协议 (详解)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

49天精通Java,第26天,LinkedHashSet、LinkedHashMap、EnumSet、EnumMap

目录一、链接散列集LinkedHashSet二、链接散列映射LinkedHashMap三、枚举集EnumSet1、EnumSet2、枚举集可以用来实现一些特殊的功能,例如:3、枚举集的常用方法包括:四、枚举映射EnumMap1、EnumMap2、枚举映射可以用来实现一些特殊的功能&…

基于朴素贝叶斯分类器的钞票真伪识别模型

基于朴素贝叶斯分类器的钞票真伪识别模型 内容 本实验通过实现钞票真伪判别案例来展开学习朴素贝叶斯分类器的原理及应用。 本实验的主要技能点: 1、 朴素贝叶斯分类器模型的构建 2、 模型的评估与预测 3、 分类概率的输出 源码下载 环境 操作系统&#xf…

springboot学习2

一、spring boot自动装配原理 pom.xml spring-boot-dependencies 核心依赖在父工程中 在写或者引入一些spring boot依赖的时候&#xff0c;不需要指定版本&#xff0c;因为有这些版本仓库启动器 <dependency><groupId>org.springframework.boot</groupId>&…

数据结构刷题笔记 | 数组、字符串、链表、栈、队列、数、图

本篇为笔者学习数据结构时&#xff0c;在牛客网站的刷题笔记。 数组——长度固定 数组是一种对象&#xff0c;不属于原生类&#xff0c;数组的大小确定之后不可改变。【原生类指未被实例化的类&#xff0c;数组一般指实例化&#xff0c;被分配空间的类】数组常用的两种基本操作…

C#,码海拾贝(18)——矩阵的(一般)三角分解法(Triangular Decomposition)之C#源代码,《C#数值计算算法编程》源代码升级改进版

1 三角分解法 Triangular Decomposition 三角分解法亦称因子分解法&#xff0c;由消元法演变而来的解线性方程组的一类方法。设方程组的矩阵形式为Axb&#xff0c;三角分解法就是将系数矩阵A分解为一个下三角矩阵L和一个上三角矩阵U之积&#xff1a;ALU&#xff0c;然后依次解…

数字化体验时代,企业如何做好内部知识数字化管理

随着数字化时代的到来&#xff0c;企业内部的知识管理也面临着新的挑战和机遇。数字化技术的应用&#xff0c;可以极大地提高企业内部知识的数字化管理效率和质量&#xff0c;从而提升企业内部的工作效率、员工满意度和企业竞争力。本文将从数字化时代的背景出发&#xff0c;探…

大数据 | HBase基本工作原理

前文回顾&#xff1a;MapReduce基本原理 目录 &#x1f4da;HBase基本介绍 &#x1f407;HBase的设计目标和功能特点 &#x1f407;HBase在Hadoop中的生态环境 &#x1f4da;HBase的数据模型 &#x1f407;逻辑数据模型 &#x1f407;物理存储格式 &#x1f4da;HBase基…

使用golang连接kafka

1 下载&#xff0c;配置&#xff0c;启动 kafka 下载链接 配置修改 在config目录下的server文件和zookeeper文件&#xff0c;其中分别修改kafka的日志保存路径和zookeeper的数据保存路径。 启动kafka 先启动kafka自带的zookeeper&#xff0c;在kafka的根目录下打开终端&a…

教程 | 多通道fNIRS数据的预处理和平均(下)

前言 前文近红外数据的预处理和平均&#xff08;上&#xff09;提到fNIRS是一种评估氧和脱氧血红蛋白浓度变化的方法&#xff0c;可与fMRI相媲美。fNIRS的不足是它的空间分辨率比fMRI差&#xff0c;但其优点是有更高的时间分辨率&#xff0c;并允许测量无法通过fMRI扫描仪测试…

VsCode 将源代码管理中的新旧代码上下对比变为左右对比

文章目录一、默认设置二、左右布局变成了上下布局三、解决方法&#xff1a;将上下布局改为左右布局1&#xff1a;找到右上角的更多设置2&#xff1a;点击更多设置后点击【切换到并排视图】3&#xff1a;效果如下&#xff08;还是原来的效果&#xff09;四、左右切换成上下总结一…

Python与各种开发语言比较、对比优略

选择要学习的技术和选择要上的大学一样重要&#xff0c;如果选错了&#xff0c;你将来不仅得不到自己喜欢的高薪工作&#xff0c;反而会弄得一堆麻烦。如果你打开了这篇文章&#xff0c;说明你已经考虑选择Python开发作为你以后的职业了。在这篇文章里&#xff0c;我们会详细找…

stata变量引用

stata变量引用–潘登同学的stata笔记 文章目录stata变量引用--潘登同学的stata笔记变量生成gen命令通配符&#xff1a;*, ?, -因子变量时间序列变量命名、前缀与标签变量命名、添加前缀通配符与批量重命名变量标签数字-文字对应表CSMAR数据处理查看、查找变量单值、暂元单值暂…

超详细!腾讯NLP算法岗面经(已offer)

作者 | ZipZou整理 | NewBeeNLP面试锦囊之面经分享系列&#xff0c;持续更新中 可以后台回复"面试"加入交流讨论组噢分享一篇旧文&#xff0c;希望大家都成功上岸~写在前面首先来段简单的自我介绍&#xff1a;2021届硕士&#xff0c;硕士期间未有实习经历&#xff0c…

FE_CSS 页面布局之浮动

网页布局的本质——用 CSS 来摆放盒子。 把盒子摆放到相应位置。CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序)&#xff1a; 普通流&#xff08;标准流&#xff09;浮动定位 1 标准流&#xff08;普通流/文档流&#xff09; 所谓的标准流: 就是标签按照规定…

Runtime命令参数字符串和数组比较

问题 最近有个问题本地执行 ssh -p 8084 root10.224.122.51 \"ssh -p 22 root192.168.5.157 mkdir -p /opt/dw-release/pdld-admin\"程序执行总是报错&#xff1a; No such file or directory 但是直接在终端执行正常&#xff0c;这就很奇怪。肯定能推出是程序执行…

10.1 二重积分的概念与性质

学习目标&#xff1a; 学习二重积分&#xff0c;我会采取以下几个步骤&#xff1a; 了解基本概念&#xff1a;首先我会学习二重积分的定义及其意义&#xff0c;了解二重积分的性质和特点&#xff0c;以及二重积分的计算方法。 理解二重积分的几何意义&#xff1a;我会通过画图…

【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…