蓝鲸DevOps深度解析系列(2):蓝盾流水线初体验

关注嘉为科技,获取运维新知

前面一篇文章《蓝鲸DevOps深度解析系列(1):蓝盾平台总览》,我们总览了蓝鲸DevOps平台的背景、应用场景、特点和能力;

?

接下来我们继续解析蓝盾平台的核心组件——流水线引擎。本文介绍的是蓝盾流水线的用户体验,为了让大家有更直观的感受,所以图片较多,请谅解。

传统的瀑布式软件开发模型在需求明确、业务稳定的项目中,有着明显的优势;而面对需求频繁变化的项目、持续迭代的互联网产品,敏捷开发方法正好适合。

DevOps则帮助开发、测试和运维团队共同创建了一个强大的、可预测的软件交付方式。

DevOps强调“将软件建设的所有环节进行自动化&全面监控”,也就是使用正确的持续集成(CI)和持续交付(CD)工具集,把持续交付的过程变得自动化,更快速、可靠;并且将过程数据进行尽可能完整的数据采集和分析,用于持续的精益改进。

实现这一切的核心是实现高效交付的自动化流水线。根据《2018全球DevOps现状调查报告》,基于 DevOps 改进了软件交付效能的精英组织相比低效组织来说,吞吐量和可靠性的提升,流水线居功至伟。

蓝盾流水线的背景

在腾讯互动娱乐事业部(IEG),庞大的持续部署和持续集成、持续运营的需求,驱动着流水线也经历了两条不同主线的发展:

1) CD/CO流:从自动化应用部署和发布工具,到通用的运维平台支撑部署和运营作业流水线

时至今日,腾讯IEG运营的六百多款产品使用的语言、技术架构、数据库、运行环境差异化仍然非常大。面对每个产品的部署发布、运营作业的编排和执行需要,摆在面前有两条路可以选择:

● 为每个产品的部署发布、运营场景定制开发特定的工具,一个个工具变成一个个烟囱,开发团队需要面对不同的需求疲于奔命;

● 建立技术运营的体系,将平台的建设和运营场景的建设分开,平台建设团队不断的丰富平台能力,产品运营团队基于平台以组装的方式来实现部署发布和运营场景。

如果我们为数百款产品开发数百个部署、运营工具平台,那么数百款产品的运维、运营工具的开发,会导致巨大的成本、稳定性问题。

显然,建立技术运营体系这条路是不得不走的路,这个平台也就是诞生于IEG的蓝鲸平台。蓝鲸平台的介绍文章颇多,在此不做详细的介绍。

2) DevOps流:从基于Jenkins的持续集成流水线,到自研的强大流水线引擎

无论是在初创公司还是大型企业,在需要持续交付的项目/产品研发中引入DevOps都可以减少人为错误的发生。

该模型允许研发维持质量,同时加快端到端快速交付流程。在DevOps体系中,流水线结合研发效能工具可以帮助企业创建自己的快速交付管道。

DevOps落地过程中,最关键的、同时挑战最大的是构建自动化持续交付流水线。

自动化持续交付流水线涉及到代码拉取、代码静态分析、编译构建、单元测试、制品归档、自动化测试、安全扫描、压力测试、部署测试环境、部署预发布环境、发布等等环节的串联和自动化执行。

建设企业级的统一DevOps平台,开源的Jenkins 流水线在性能、可扩展性、稳定性、安全性、用户体验方面都存在明显的不足,踩过了若干坑之后腾讯IEG不得不重新设计了流水线引擎,而且它必须要比Jenkins更为强大,才能有存在的价值。

蓝盾流水线的用户体验

如果流水线引擎不能带来良好的用户体验,不能适应各种场景下的流水线灵活编排,那么它和执行脚本有什么区别?

在用户体验方面,蓝盾的流水线可以说做到了极致,本文就从用户体验着手,来初步解析蓝盾流水线:

1) 轻松简单的流水线编排

蓝盾流水线让用户不需要学习Jenkins的Pipeline语法,也不需要过于关注和工具平台如何对接。

图形界面的可视化的流水线设计,灵活组装各种原子,配置化原子设置,降低了使用难度,也减少了脚本难以调试、容易出错的问题。更不会出现人员更迭导致无法维护的问题。

下面的流水线示例,各一个纵列是一个阶(Stage),每个块是一个任务原子(Task),近百种原子模板可以根据业务的需求,灵活组装出各种流水线,对接各种工具实现CI/CD环节的各种功能和流程。

我们可以从空白模板开始创建流水线,也可以从流水线模板库中的模板来建立流水线。模板可以预先设置好流水线的阶段、构建环境、原子类型等,降低流水线编排的难度。模板可以由用户自己来创建。

流水线可以把任务分为多个阶段(Stage),每个阶段(Stage)下面,还可以有多个并行的作业(Job),每个作业都可以指定不同的构建环境,我们可以在构建阶段并行进行不同的构建环境下的程序的构建,例如:后台服务、Web端、移动端。每个作业下面,还可以有多个串行执行的任务原子(Task)。

每个任务原子都是可以配置的,每个原子模板都有特定的功能,我们可以选择任何一种原子类型下面的原子模板。蓝盾内置了近百种原子模板供我们选择和组装,如果没有满足的原子,也允许用户自己扩展开发。

例如,我们选择了拉取GitLab仓库代码原子模板,我们就可以直接在图形界面进行原子的参数化配置GitLab代码仓库的信息,流水线执行到该原子时,就会根据配置自动的从指定代码仓库拉取指定版本的代码。

如果我们选择了代码检查任务模板,我们就可以配置代码检查执行任务中的语言和代码检查工具;流水线执行到该原子时,就会启动代码检查平台按照指定的设置开展代码扫描了。

2) 直观清晰的流水线跟踪

流水线被执行之后,我们需要了解流水线的执行情况,例如:成功与否、耗时、日志;我们还需要拿到流水线执行的产出物(即制品包)、报告(代码检查报告、单元测试报告)。过往这些信息往往是散落在不同的工具平台中的,给我们的实际工作带来很多不必要的困扰。

上图中,流水线的每次执行的结果,都可以在执行历史中被展示出来。包括:启动时间、构建序号、耗时、版本号、触发方式和执行人等。如果需要看更加详细的信息,我们可以点击其中一次记录,就可以看到该次执行的具体信息。

如果有异常,流水线会自动停止和发送通知,在执行结果界面清晰的标识出哪个原子出现了异常。

如果需要进行更进一步的了解原子的执行情况,在执行结果中点击任何一个原子,我们可以深入查看和分析该原子更细节的日志,例如:

在“查看构件”标签页,我们可以直观看到本次流水线执行生成的制品包,如果有需要可以直接下载到本地或者查看元数据,而不是需要到切换到制品仓库软件中去查找。

在“代码变更记录”页,我们直接可以查看到本次流水线的执行涉及的代码变更版本号范围以及具体的Commit信息,可以用于追踪产出的新的版本,涉及了哪些需求或变更、缺陷的修复。

在“产出物报告”标签页中,集中展示流水线中各个环节产生的报告,例如下面的代码检查原子产生的代码检查报告。

以及在单元测试环境产出的单元测试报告。

3) 流水线的设置

在流水线的设置中,我们可以配置流水线的运行锁定、通知设置、权限设置等。例如:可以设置流水线在同一时间可以运行一个或多个实例。

流水线在构建成功或失败时,对哪些人进行某种方式的通知。

总结

从上述信息可以看到,蓝盾流水线的用户体验可以说超越了所有的其他流水线工具,这种用户体验带来的不只是界面好看本身,而是蓝盾产品团队对DevOps的更多考虑:

● 蓝盾作为企业级的DevOps平台,我们希望的是靠平台的强大、极致的用户体验吸引各个研发团队将研发流程迁移到平台上,而不是通过行政命令要求各个团队必须使用蓝盾DevOps平台;行政命令则可能会带来用户反弹和博弈,而蓝盾是一个能“润物细无声”的帮助企业把DevOps研发标准、规范体系推广到全企业的研发效能平台;

● 用户体验绝不只是“界面好看”四个字所能概括的,极致的用户体验是建立在对市场竞品的调研和分析,对庞大的DevOps团队用户进行调研和分析,对平台的不断优化和打磨,对蓝盾工具链的各个工具进行深度打通等等的基础之上;平台的功能、稳定性、扩展性等必须做到极致,才是用户体验能达到极致的前提;

● 用户体验不应只是带来用户的方便,直接或者间接带来的更多是:学习成本的降低、研发效能的提升、交付频率更高、交付时间更短,由于流水线编排出错导致的部署失败、运行事故降低到极低,由于人员变动带来的影响更小;IT团队在DevOps项目中的参与度更高、团队更加稳定,可以有更多的精力放在业务层面的运营和优化中。

未完待续,敬请期待……

????

原文地址:https://blog.51cto.com/11811406/2361689

时间: 2024-08-01 00:04:59

蓝鲸DevOps深度解析系列(2):蓝盾流水线初体验的相关文章

蓝鲸DevOps深度解析系列(1):蓝盾平台总览

??关注嘉为科技,获取运维新知 2018年10月,嘉为科技与腾讯云.蓝鲸智云携手,在北京.上海.广州.深圳举办 "研运一体,数据驱动,让运维走向运营"为主题的分享会,来自金融.电力.能源.制造等行业的数百家企业到场参加. 在这个分享会上,除了下一代的研发运营体系.基于蓝鲸平台实现企业IT自动化运维落地.蓝鲸大数据分析平台这几个主题之外,还有一个重要的主题,就是蓝鲸DevOps的实践之路.接下来我们会以一系列的文章深度解析腾讯蓝鲸在DevOps 上的实践之路,窥探蓝鲸DevOps平台为开

深度学习之TensorFlow安装与初体验

深度学习之TensorFlow安装与初体验 学习前 搞懂一些关系和概念 首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的神经网络结构是浅度学习的模型. 浅度学习:层数少于3层,使用全连接的一般被认为是浅度神经网络,也就是浅度学习的模型,全连接的可能性过于繁多,如果层数超过三层,计算量呈现指数级增长,计算机无法计算到结果,所以产生了深度学习概念 深度学习:层数可以有很多层,但是并不是全连接的传递参数,如上图中右边是一个

【Spring源码深度解析系列 】Spring整体架构

一.Spring的整体架构和模块 二.模块分类: 1.Core Container Core Container包含有Core .Beans.Context.和Expression  Language模块 2.Data Access/Integration Data Access/Integration包含有JDBC.ORM.OXM.JMS和Transaction模块 3.Web Web层包含了Web.Web-Servlet.Web-Struts.Web-Porlet模块. 4.AOP 5.Te

git系列1之安装初体验(windows)

1.百度云盘地址 https://pan.baidu.com/s/1o8vAt78 2.下载后双击直接下一步下一步即可 3.创建一个目录,并在目录中创建文件README.CD 4.把项目放入git中进行管理 右击鼠标,选择bash窗口 第一个要配置的是你个人的用户名称和电子邮件地址.这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录 $ git config --global user.name "John Doe" $

Office 365系列之三:Office365初体验

在上一章节中我们已经成功申请注册全球版微软Office 365 商业高级版了,试用期是30天.接下来跟大家一起检查下具备哪些服务和订阅,怎么去延长试用期,怎么去查看并确保各种服务是正常的. 登陆Office 365管理中心,如下图: 将下拉框拉到最底部,可看到各个服务状态,确保当前的运行状况均为"没有问题"(刚注册一般需要等待15分钟左右) 在仪表板页面,点击"查看和编辑您的订阅" 跳转到"订阅"页面后即可看到订阅的服务.状态.许可证数量等信息,

小马哥-Java 微服务实践 - Spring Boot 系列-01Java 微服务实践 - Spring Boot 系列(一)初体验

课程github地址 https://github.com/mercyblitz/segmentfault-lessons 传统的web应用架构.微服务是一种架构.不限定什么语言 单体应用和微服务的对比 SOA 微服务的发展史 rpc更讲究面向接口 socket更面向于底层 分布式的,也叫作进程外的 业务处理的结果一般返回给服务组件. rest可以是json.xml.html.为什么很多会会选择json,json的格式比较简单清晰. 微服务面临的挑战 表达式驱动依赖反射驱动 目录概要 demo

深度解析Istio系列之Istio-proxy初始化篇

注:以下讲述的按理环境场景是基于Kubernetes环境基础上部署的Istio环境. 涉及到Envoy概念介绍请参考深度解析Istio系列之流量控制篇.本文重点针对Envoy初始化场景进行拆解. Istio-proxy(Envoy)作为Istio数据平面的重要组件,基于sidecar方式与业务应用混合部署到同一pod,为应用提供代理服务.Pilot作为控制平面组件,基于元数据的抽象层,屏蔽底层具体容器环境(Kubernetes或者docker),同时为Envoy的策略执行提供有效的数据支撑.那么

程序员收藏必看系列:深度解析MySQL优化(二)

程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而应该是在实际的业务场景下通过测试来验证你关于执行计划以及响应时间的假设. scheme设计与数据型优化选择数据类型只要遵循小而简单的原则就好,越小的数据类型通常会更快,占用更少的磁盘.内存,处理时需要的CPU周期也更少.越简单的数据类型在计算时需要更少的CPU周期,比如,整型就比字符操作代价低,因而

深度解析互联网大厂面试难题自定义@EnableXX系列

深度解析互联网大厂面试难题自定义@EnableXX系列 其实是一个@Import的设计技巧 创建注解@EnableXX(任何名称注解都行,只是这个名字好一些) XXConfiguration类不能使用@Component,不然Bean就立即注册了,达不到开关的目的 使用@EnableXX注解的时候,一定是与@Component或者@Configuration进行复合使用,否则开关本身无效,换句话说就是让别的@Component或者@Configuration把自己的@Bean带进去. 实体类 p