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

前面一篇文章《蓝鲸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项目中的参与度更高、团队更加稳定,可以有更多的精力放在业务层面的运营和优化中。

未完待续,敬请期待……

​​​​

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

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

    ​​关注嘉为科技,获取运维新知 2018年10月,嘉为科技与腾讯云.蓝鲸智云携手,在北京.上海.广州.深圳举办 “研运一体,数据驱动,让运维走向运营”为主题的分享会,来自金融.电力.能源.制造等行业的 ...

  2. Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE

    Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE

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

    深度学习之TensorFlow安装与初体验 学习前 搞懂一些关系和概念 首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的 ...

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

    一.Spring的整体架构和模块 二.模块分类: 1.Core Container Core Container包含有Core .Beans.Context.和Expression  Language ...

  5. CrackMe005-下篇 | 逆向破解分析 | 160个CrackMe(视频+图文)深度解析系列

    作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站 CrackMe005,上篇说了具体方法,下篇来发逆向分析过程,看看老夫是如何得到上篇的具体方法的! 准备 [环境和工具] win7/xp虚拟机环境 C ...

  6. Angular2入门系列教程2-项目初体验-编写自己的第一个组件

    上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...

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

    课程github地址 https://github.com/mercyblitz/segmentfault-lessons 传统的web应用架构.微服务是一种架构.不限定什么语言 单体应用和微服务的对 ...

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

    程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而 ...

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

    深度解析互联网大厂面试难题自定义@EnableXX系列   其实是一个@Import的设计技巧 创建注解@EnableXX(任何名称注解都行,只是这个名字好一些) XXConfiguration类不能 ...

随机推荐

  1. Python:re中的group方法简介

    原文地址:http://www.cnblogs.com/kaituorensheng/archive/2012/08/20/2648209.html. 正则表达式中,group()用来提出分组截获的字 ...

  2. js点击什么显示什么的内容,隐藏其它和进度条

    点击什么显示什么的内容 <div style="width:200px; height:40px"> <div class="yiji" st ...

  3. Java IO和Java NIO 和通道 在文件拷贝上的性能差异分析

    1.  在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取到用户空间的缓冲区 ...

  4. linux下tomcat的https访问

    1.安装JDK(省略…) 2.安装tomcat(省略…) 3.配置SSL 进入JDK的安装目录 # cd /usr/java/jdk1..0_03/bin # ./keytool -genkey -a ...

  5. Halcon一维运算相关算子整理

    Halcon一维离散函数算子 1.      abs_funct_1d  计算一维数组的绝对值 2.      compose_funct_1将两个离散的一维函数合并为一个函数 3.      cre ...

  6. Centos7 下yum安装mysql

  7. Java8-对map排序

    1.Java8对map按key排序 /** * @author : fengkun * @date : 19-3-10 * 内容 : Java8对map按key排序 */ public class S ...

  8. Invalid bound statement (not found):xxx错误的可能原因

    1,报错信息 log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvir ...

  9. vue 显示 webpack-dev-server不是内部命令的解决办法

    然后在cmd中cd到项目目录,依次运行命令: npm install 和 npm run build 最后运行 npm run dev 后项目成功运行.

  10. poj3984迷宫问题(DFS广搜)

    迷宫问题 Time Limit: 1000MSMemory Limit: 65536K Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, ...