实现高效研发运营一体化:深度落地DevOps解决方案的探索与实践

news2024/9/20 5:46:26

    前言与概述

伴随着企业业务的快速发展,为了支撑业务发展,提高 IT 对业务的支撑能力建设。在研发工程协同方面,希望加强代码管理,实现持续构建、自动化测试、自动化部署、自动化运维,同时加强产品的安全和质量管理;在研发管理协同方面,希望实现从需求提出、需求规划、需求设计需求设计、需求开发、需求测试、需求上线的端到端的管理,并支持瀑布模型和敏捷模型的项目开发。

基于以上背景,企业更希望借助研发运营一体化体系的建设和 DevOps 工具平台的建设赋能研发,提高质效。

什么是 DevOps

DevOps(英文 Development 和 Operations 的组合)是一组过程、方法与系统的统称。用于促进开发(应用程序 / 软件工程)、测试(QA)、技术运营之间的沟通、协作与整合通过高度自动化工具与流程,使得软件构建、测试、发布更加快捷、频繁和可靠,从而快速交付想法、尽快让客户尝试从而获取反馈、快速响应客户反馈、提升业务速度,或尽量降低运营成本和减少浪费。

研发运营一体化(devops) 能力成熟度模型

  1. DevOps 国内翻译为开发运维一体化,但目前人们更多关注的是在开发与测试域,运维域仅有自动化发布归属 DevOps。DevOps 作为最佳实践,旨在提高软件交付速度和质量,打通部门间壁垒,促进协同,做到了从需求到运维,端到端的流程打通和可视化。

  2. DevOps 平台基础版包括代码配置管理、自动化编译打包、自动化部署 / 发布;高级版除基础版模块外,还包括需求管理、项目管理、开发管理、测试管理等协同功能。

  3. 经过多年的发展和演进,DevOps 已经形成了较为完备的知识体系,那就是以精益管理为基础,敏捷管理、持续交付、IT 服务管理为支柱的知识体系。

下图为研发运营一体化能力成熟度模型图,旨在帮助企业更好地理解和规范 DevOps 的落地实施与应用。

研发运营面临的 “四大” 挑战

  • 业务压力:激烈的市场竞争对业务提出更高的要求,数字化转型成为产业升级的重要抓手,快速、高效、高质量的交付业务价值。

  • 技术压力:云原生等新技术在带来便捷的同时,也增加了交付与维护的复杂度,对技术人员提出了更高的要求。

  • 效能压力:随着组织规模越来越大,多团队、多项目、多产品协作成本越来越高,单人效率日渐下降。

  • 成本压力:研发运营成本日益高企;复合型人才稀缺。

信息化程度走高后,暴露的研发运营问题

  1. 团队之间、不同角色之间协同效率低(信息离散难回溯,沟通成本高、效率低)

    1. 任务的分配、状态追踪需要人工 (当面 / 邮件 / 会议等) 反馈、跟踪;
    2. 线下沟通,参与人员多,邮件多,会议多,沟通成本高;
    3. 风险 (比如延迟开发、SIT、UAT) 的反馈慢。
  2. 研发过程割裂,缺乏研发运营一体化平台(IT 资源管理成本高、无法做过程优化)

    1. 多个团队都有自己的研发工具,重复造轮子;
    2. 交付件、发布内容缺乏统一管理,没有版本规范,流程管理规范;
    3. 工具互不关联,数据无法集成,任务协调进度无法集成。
  3. IT 侧的响应跟不上市场竞争节奏(市场商机稍纵即逝、IT 成本越堆越高)

    1. 业务迭代频率越来越高,现在的交付模式已经成为瓶颈;
    2. 发布过程复杂及人工操作时间久,发布涉及不同系统或数据库之间的前后发布依赖、部分复杂的应用;
    3. 前无法实现自动化发布,手工发布的系统比例较大。
  4. 系统可用性无法保障(用户流失、业务流程阻塞)

    1. 发布完成后,仅能做简单验证服务启动成功,对业务功能验证,并无好的方法;
    2. 线上服务没有故障快速发现,缺少自动化运维能力 (健康检查、弹性伸缩、 故障自恢复等)。

研发运营一体化建设思路

价值流交付平台使企业组织能够简化 DevOps 交付流水线的构建和管理。它们最大限度地减少了编排、集成和治理中涉及的开销,从而通过为工作流程提供可见性、可追溯性和可观察性来最大化价值。 产品基于价值流管理的思想,引入 DevOps 价值流管理理念,通过建设科学、规范、高效的一体化软件研发效能体系与平台,提升组织级软件交付、运维效能,以实现对企业数字化转型及业务创新的有力支撑和持续驱动,达到一体化、统一化、场景化、自动化、可视化的目标。

  • 体系化:引入 DevOps、ITIL 体系框架,建设科学的研发运营体系,实现企业的数字化转型和业务价值创新。

  • 统一化:通过建设规范、高效的一体化研发运营平台,实现多角色、多维度、多视角线上化的高效协作。

  • 场景化:通过模板化、规则化等手段,实现多种研发交付场景下的管理与生产动作的联动,从而实现从左到右端到端的价值流动,实现部门协同管理。

  • 自动化:以软件交付工序为主线,集成专业化 IT 服务管理工具、配置管理等生产工具,提升持续交付、持续运营的自动化能力。

  • 可视化:通过价值流可视化能力来分析价值和浪费,促进端到端的价值流快速流动。

解决方案

研发运营一体化建设蓝图规划

研发运营一体化平台,实现了企业从需求、规划、设计、开发、测试、发布、运维的端到端的管理。在需求全过程中涉及到需求管理、项目协作、配置管理、测试管理、发布管理、运维管理以及研发效能度量等活动,典型场景如下:

  1. 业务人员提交意向需求,BA 进行需求分析,编写业务需求和软件需求,并将需求关联到相关项目。

  2. 项目经理制定迭代计划,将需求分配到相关迭代计划,并将需求转化成任务,分配给开发人员。

  3. 开发人员按照任务完成代码开发,并提交代码,配置管理人员按照分支合并源代码,并手工触发流水线执行,流水线自动完成构建、自动化部署、自动化测试等工作,待测试人员完成测试用例的执行和报告后,执行发布流水线,最终完成生产部署工作。

 

研发运营一体化平台应用架构

研发运营一体化平台应用架构具体分为项目管理、产品管理、需求管理、测试管理、发布管理以及运维管理 6 大模块。未来平台将继续开放敏捷管理、代码库管理、流水线以及制品管理等模块功能。

研发运营一体化平台技术架构

云原生

  • 服务化前后端分离、基于 Rest API 交互,后端基于 DDD 拆分微服务;

  • 前端采用 Vue+H5、后端采用 Spring Cloud 开发框架。

  • 容器化支持应用容器化部署和管理,支持资源动态伸缩。

  • DevOps 通过 IaC 构建 DevOps (GitOps)

服务化

  • 开放 API 便于三方集成及生态化发展。

  • 集成 HUB 抽象集成层、数据模型便于集成及映射。

场景案例

场景一:高效协作,全流程解决方案

  • 实现需求管理流程、项目管理流程、测试管理流程、发布管理流程、变更管理流程、事件管理流程的全流程打通。

场景二:多维度、多层次研发协同

  • 实现业务人员、需求人员、产品经理、项目经理、开发人员、测试人员、部署人员、运维人员高效协同个信息共享。

场景三:需求端到端的管理

  • 面向业务,实现从需求收集、需求分析、需求规划、需求开发、构建和部署、需求测试、需求发布的端到端管理;

  • 支持需求的逐层分解(创意、史诗、特性、用户故事)和细化;

  • 支持需求的自动化跟踪和可视化管理。

场景四:项目全周期管理

  • 实现项目从启动、计划、执行 & 控制、结项的全生命周期管理;

  • 支持瀑布模型和敏捷模型的项目管理;

  • 支持项目迭代计划和里程碑计划管理。

场景五:统一软件配置管理

  • 全生命周期:从规划到产品交付投产的端到端的企业级配置管理全生命周期的统一化、线上化支持;

  • 分层级分角色管理:区分组织级、项目级角色;组织级可以关注在统一管控、支持指导方面;项目级角色可以进行日常的配置管理和环境管理的工作;

  • 多工具支持:企业内不同团队可根据需要自行选择版本管理工具支撑开发。

场景六:测试全周期管理

  • 按照测试任务,编写或者关联测试用例,执行测试用例,记录测试结果,并生成测试报告;

  • 建立统一测试用例库,测试任务从测试用例库提取测试用例。

场景七: 自动化 流水线

  • 全链路工具链集成

  • 流水线编排和调度

场景八:运维服务流程和 DevOps 的集成场景

  • 实现运维发布管理和发布流水线的自动化对接;

  • 实现制品元数据与 CMDB 信息的自动化同步。

 

场景九: 基于服务端到端 DevOps  CMDB 的融合

  • CMDB 为端到端的服务交付过程提供数据基础,提供部署环境信息。

  • 发布完成后,DevOps 自动同步应用配置基线数据到 CMDB

 场景十:研发运营一体化价值度量

项目建设收益

  • 提高 IT 管理效率

    •   通过统一平台、统一入口管理,管理者能够掌握软件研发全过程的信息,对软件研发全过程进行可视化掌控,及时了解需求、设计、开发、配置、构建、测试、部署等情况,实现可视化、透明化管理。
  • 提升 IT 工程效率

    •   一键式部署,实现代码提取、分支合并、自动构建、自动化测试、自动化部署的全过程管理。全过程无需人工干预,降低相关人员的技术和工具要求,同时产品支持自动化撤版和回滚,降低运维生产事故和风险。
  • 增强系统稳定性,提高项目质量

    •   实现项目全过程的规范化管理,通过自动化流水线,降低出错的机率,通过集成安全、质量、自动化测试工具,实现对交付质量的自动化检测,提高交付质量。

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

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

相关文章

VBA调用Office的MODI组件识别图片中的文字

Microsoft Office Document Imaging (MODI)是Office 2003-2007版本中的一个利用OCR(Optical Character Recognition 光学字符识别)技术识别图像中的文字并转换为文本的一个组件。在VBA中使用该组件需要在“工具-引用”中将其设置为“可使用的引用”&…

基于Kotlin Multiplatform的鸿蒙跨平台开发实践

一、 背景 在 2023 年的华为开发者大会(HDC)上,华为预告了一个全新的鸿蒙系统 Harmony Next 版本。与之前的鸿蒙系统不同,Harmony Next完全摒弃了对 AOSP 的兼容,彻底基于 OpenHarmony 开源鸿蒙实现。这意味着该系统将…

集团数字化转型方案(七)

集团数字化转型方案旨在通过全面整合先进的信息技术和数据分析工具,构建一个高度智能化的业务平台,实现从生产、供应链到客户服务的全链条数字化升级,通过自动化流程优化、数据驱动的决策支持和智能化的业务运营,提升整体运营效率…

基于x86 平台opencv的图像采集和seetaface6的静默活体功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的静默活体功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的静默活体模块从而实现…

C语言 | Leetcode C语言题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; bool canMeasureWater(int jug1Capacity, int jug2Capacity, int targetCapacity) {int j1 jug1Capacity < jug2Capacity ? jug1Capacity : jug2Capacity, j2 jug1Capacity > jug2Capacity ? jug1Capacity : jug2Capacity;if (ta…

C++ 设计模式——单例模式

单例模式 C 设计模式——单例模式1. 单例模式的基本概念与实现2. 多线程环境中的问题3. 内存管理问题1. 内存泄漏风险2. 自动释放策略3. 垃圾回收机制4. 嵌套类与内存管理 4. UML 图UML 图解析 优缺点适用场景总结 C 设计模式——单例模式 单例模式&#xff08;Singleton Patt…

【Canvas与艺术】环形Z字纹

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>环形Z字纹</title><style type"text/css">.ce…

Transformer 论文通俗解读:FFN 的作用

在经过前面3节关于 Transformer 论文的解读之后&#xff0c;相信你对提出 Transformer 架构的这篇论文有了一定的了解了&#xff0c;你可以点击下面的链接复习一下前3节的内容。 《Attention is all you need》通俗解读&#xff0c;彻底理解版&#xff1a;part1 《Attention …

基于ssm+vue+uniapp的跑腿平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

qt的QCustomPlot绘制实时曲线图总结

一、组件的下载 下载下来后文件如下图所示&#xff0c;具有丰富的例程&#xff0c;这个很好&#xff0c;注意后面要用到的c文件和头文件&#xff0c;听说还有丰富的帮助文档&#xff0c;暂时没有时间去找&#xff0c;大概翻看了一下没有看到 二、拷贝.h 和c文件到工程目录&…

asp.net Core blazor学习笔记

最近在研究学习blazor&#xff0c;为了加深记忆&#xff0c;手动记录一下&#xff0c;以下内容为个人理解记录&#xff0c;仅供参考&#xff1a; Blazor开发学习 一 分类1 Blazor Server 应用2 Blazor WebAssembly 应用3 Blazor Hybrid 应用和 .NET MAUI 二 基础知识1 路由2 组…

使用预训练的 ONNX 格式的 YOLOv8n 模型进行目标检测,并在图像上绘制检测结果

目录 __init__方法&#xff1a; pre_process方法&#xff1a; run方法&#xff1a; filter_boxes方法&#xff1a; view_img方法&#xff1a; ​​​​​​​__init__方法&#xff1a; 初始化类的实例时&#xff0c;创建一个onnxruntime的推理会话&#xff0c;加载名为yolo…

电机启动对单片机重启的影响

单片机使用ASM1117对9V电压降压供电&#xff0c;IO口接三极管控制电机 &#xff0c;接9V&#xff1b;每次启动瞬间&#xff0c;单片机重启 试进行分析 网上参考&#xff0c;添加滤波&#xff0c;电容&#xff0c;阻容&#xff1b;分开电源处理&#xff08;双电源&#xff09;&…

JVM虚拟机(二)如何定位垃圾、判断对象是否死亡?垃圾回收算法、垃圾回收器、CMS、G1垃圾回收器

一、GC基本信息 1.1 什么是GC&#xff0c;垃圾回收&#xff1f; JVM的垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是一种自动内存管理机制&#xff0c;其主要目的是识别并清除不再使用的对象&#xff0c;释放内存空间以供应用程序中的其他部分使用。G…

go+gin+vue入门

后端框架 1、安装go、goland 2、创建空项目 3、下载要用的包&#xff1a;命令行输入go get -u github.com/xxxx 4、安装mysql数据库&#xff0c;使用navicat创建数据库。 5、按照项目框架搭建目录、文件、代码&#xff1a;如router、model… 6、运行测试&#xff0c;go run ma…

C语言基础(十一)

1、指针&#xff1a; C语言中的指针是一种非常重要的数据类型&#xff0c;可以直接访问和操作内存地址。指针存储变量的内存地址&#xff0c;而不是变量的值本身。通过使用指针&#xff0c;可以灵活地控制数据的存储和访问&#xff0c;实现复杂的数据结构如链表、树。 定义指…

C++操作excel,即使函数设置了不备份,但保存后,excel依然会自动生成备份文件的原因分析,及如何来禁止自动备份

开发环境 操作系统&#xff1a;windows 10 编译器&#xff1a;Visual Studio 2010、2015、2017、2022 office 2016、2019、2021 wps 2019、2024 问题描述 通过C操作excel&#xff0c;保存后&#xff0c;excel会自动生成备份文件。 void CExcelDemoDlg::OnBnClickedButton1() …

Open3D mesh 隐藏点移除

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2去除隐藏点后的点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&…

力扣 128. 最长连续序列

题目描述 我的思路 我的思路比较暴力&#xff0c;就是首先将数组从小到大进行排序&#xff0c;然后再依次遍历判断序列是否连续并时时更新连续序列的最长长度。比如示例1&#xff1a;nums [100, 4, 200, 1, 3, 2]&#xff0c;第一步先将数组进行排序得到sort_nums [1, 2, 3,…

Android Studio(3) 使用 Kotlin DSL和 Gradle 8.7 打包远程库到 AAR 的自定义方法

背景介绍 在 Gradle 7.3 及更早版本中,通常使用 com.kezong.fat-aar 插件来打包远程库到 AAR 中,随着 Gradle 的不断升级,尤其是到 8.7 版本后,Kotlin DSL开发逐渐成为主流,fat-aar 社区没有更新,插件的兼容性问题逐渐显现。我探索一种新的自定义方法,能够在 Kotlin DS…