本次分享的题目是《企业CICD规模化落地》,因此我们不会侧重讲解CICD是什么以及怎样做CICD,而是你已经知道怎样“玩转”CICD了,要如何在一个比较大的企业中规模化地落地。

本文整理自阿里巴巴技术专家崔力强(怀虎)的分享《企业CICD规模化落地》。

研发流程与持续交付简析

持续交付是随着互联网的迅猛发展逐渐普及的一种研发模式,它具有“快速反馈”“质量内建”“自动化”“开发自运维”等特点。

这种研发模式主要包含如上图所示的四个环节,“分支管理”“测试验证”“制品管理”和“发布”。在业界有很多工具支持这些操作,在云效产品矩阵中也有对应的产品提供相应功能。

在一个中小型的研发团队(比如5-10人),无论你是使用商业软件还是开源的工具,经过一段时间的学习,你都可以把“持续交付”做起来。但是当需要规模化落地之后,就有更多的问题需要考虑,如:

  • 如何提高协作效率;
  • 新团队如何快速接入;
  • 如何进行全局风险的控制;
  • 研发流程如何全局更新。

持续交付在阿里巴巴的规模化

接下来简单了解一下“持续交付”研发工具在阿里巴巴内部的演化历程。2009年,我们开发了自动化发布工具;2013年,建立统一构建部署平台;到了2016年我们已经有了持续交付平台,内部称为“Aone”,该产品包含了从代码开发、构建、发布等功能,以一个一站式的研发平台,这个产品到现在也一直在演进;2017年时,我们将“Aone”的核心功能开放出来,供广大开发者使用,就是我们的“阿里云·云效”。目前该产品在公测中,大家可以登录阿里云官网进行访问、使用。

下面我们介绍几个帮助阿里巴巴实现持续交付规模化落地的研发实践。

要使持续交付规模化落地,很重要的一点是需要有一套工具对研发模式进行全自动支持。 “研发模式”是指你做事情的一种方式,在这里主要是指代码发布模式以及对应的分支使用方式,比如“主干模式”,这也是持续交付比较提倡的一种研发模式。但是“主干模式”对研发人员的要求比较高,并且也不能很好的体现出当前要进行发布的内容。作为一位研发负责人,你可能会选择更灵活一些的研发模式,比如 “Aone Flow”或者 “Git Flow”等,这两种模式都需要一定的自动化工具进行支持。

其中Aone Flow是在阿里巴巴内部主流的一种发布模式及分支管理方式,我们这里简单介绍一下,感兴趣的同学可以在网上搜索相关文章了解。Aone Flow使用三种分支类型:主干分支、特性分支、发布分支。主干分支上的代码跟线上版本的代码是一致的,当你要开发一个新的功能时,就会拉取一个特性分支作为开发分支,然后在这个分支上提交代码修改。当你需要发布的时候,需要先将不同的特性分支合并为开发分支再进行发布。发布到线上正式环境后,合并相应的发布分支到主干,在主干添加标签,同时删除该发布分支关联的特性分支。这个过程中涉及到大量的“拉分支”“合分支”“打标签”“回滚版本”等等复杂操作,这就需要有一系列自动化工具进行支持。在阿里巴巴内部我们是通过Aone平台(即云效的内部版本)提供自动化支持的。

第二个实践是以应用为核心的一站式研发体验。“应用”是指一个服务或者微服务,可以直接对应一个代码库。以应用为中心,我们又可以串联流水线、环境管理、构建配置、部署等工具链。可以让开发人员很好的理解和打通整个研发流程,同时也可以帮助一个新团队快速上手。

上图是我们内部一个产品研发过程的截图,会有一个研发向导帮助你提交各种信息、初始化代码库、源码自动生成、申请测试环境、进行线上发布等一系列操作。这种“以应用为核心的一站式体验”非常爽,可以帮助研发团队节省很多耗费在协作上的时间,而且有了这套流程之后,只要按照向导的提示去做就好了,很少出错。

接下来,我们聊一下如何进行全局风险管控

在部署正式环境之前,会有一个Checklist,进行安全审核、PE审核等等,我们很多对外发布的应用都会经过这样的安全审核。在前DevOps时代(2016年以前),阿里巴巴内部还是有专门的运维团队的,我们叫PE团队。在正式发布前,他们会去审核发布的时间点、配置参数等。这就是全局风险管控,这些卡点会强制在一个流程中实施,不能够取消。(当然现在已经阿里巴巴内部已经取消了PE团队,这些卡点会通过自动化工具实现)

兼具灵活性与规范性的持续交付平台

通过以上几个措施,就能够在阿里巴巴内部规模化的落地CICD,当新的研发团队加入时,也不用花费太多的时间去理解这个事情,而是很快上手去操作。但是我们这一套流程也遇到一些问题,这套流程面向Web端服务是可以很好去应对的,比如我们只有一个版本的“天猫”“淘宝”,永远是面向最新版去交付的;但是随着阿里云业务的发展,特别是出现了混合云的业务,出现了面向多Region和多版本交付的情况,我们这套研发流程就有点捉襟见肘了;因为我们的研发理念是“以应用为中心”,当遇到一些跟应用无关的交付场景时这套研发流程也会显得不合时宜。

如何提高阿里巴巴持续交付平台的灵活性呢?我们最早的研发架构如上图左侧所示,底层是研发平台,上面我们做了很多“场景化”的研发组件,同时保留了一定的扩展性,比如“自定义组件”,用户可以把自己的组件接入到我们的流水线里来;也暴露了一部分API,主要只读接口,其他团队可以在这上面做一些他的场景化。

我们认为这种研发架构的灵活性和扩展能力是不足的,(如上图右侧所示)后来我们就把构建、编排、部署、制品这些能力单独拎出来,并开放对应的API,上层我们再去编纂“场景化”,而且有可能这些“场景”都不是我们开发的,而是使用这个产品的用户自己去开发,重点是我们需要将这种扩展能力暴露出来。我们还会有“自定义步骤”和“自定义组件”,这两个功能已经在云效产品中提供。同时,我们还会开发更多API、支持更多的源,也可以通过配置webhook在流水线的生命周期中(失败、成功、暂停等)通知第三方。

这样的研发架构就具备了一定的灵活性和可扩展性,但对于企业来讲这是不够,还必须具有开箱即用的能力。

云效内置代码扫描、 安全扫描和各种自动化测试能力,并通过流水线模板串联起来 。如上图右侧所示,针对主流的开发语言Java、PHP、Node.js、Go、Python等提供从构建到部署发布的各种模板,可以帮助你快速开始。

模板化能力其实是推进CICD规模化落地的关键,云效不仅提供了数十种通用的模版来帮助你快速创建流水线,同时提供定制化能力,支持定制企业自有模版来管理企业持续集成和持续交付流程,将复杂的流程通过可视化编排和结果展现,保障交付可见可控可度量。

总结:

当你已经对CICD有一定了解,怎么样更好的在组织内规模化落地呢?第一,你需要选择一款兼具灵活性和规范性的工具平台。第二,制定适合自己企业的研发模式,并将其固化下来;第三,研发模式的变更可以应用到已有的团队;第四,通过适当的卡点来控制全局风险。

以上内容整理自怀虎的视频分享《企业CICD规模化落地》,欢迎大家加入云效开发者交流群(钉钉群号:34532418)观看视频回放,下载演讲PPT。


【关于云效】

​ ​云效,云原生时代一站式BizDevOps平台​​,支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造“双敏”组织,实现 10 倍效能提升。

​ ​立即体验​​

企业CICD规模化落地浅析的更多相关文章

  1. 规模化落地云原生,阿里云即将重磅亮相 KubeCon China

    2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...

  2. Serverless 如何在阿里巴巴实现规模化落地?

    作者 | 赵庆杰(卢令) 来源 | Serverless 公众号 一.Serverless 规模化落地集团的成果 2020 年,我们在 Serverless 底层基建上做了非常大的升级,比如计算升级到 ...

  3. 高德最佳实践:Serverless 规模化落地有哪些价值?

    作者 | 何以然(以燃) 导读:曾经看上去很美.一直被观望的 Serverless,现已逐渐进入落地的阶段.今年的"十一出行节",高德在核心业务规模化落地 Serverless,由 ...

  4. EA(企业架构)落地之道

    随着业务和IT的不断融合,企业业务.信息系统和技术结合日益紧密,企业对信息系统及技术的敏捷性要求越来越高.如何在多变的环境下快速创新产品或服务并推向市场是企业面临的日益紧迫的压力.企业架构作为连接和匹 ...

  5. ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》

    "当下,企业DevOps转型不仅是IT部门的事情,更是企业高管必须关注的焦点.DevOps是一项需要自上而下推动的变革运动,只有从顶层实施,才能获得成功.本书将介绍企业高管必须了解的,Dev ...

  6. DevOps时代,企业数字化转型需要强大的工具链

    伴随时代的飞速进步,中国的人口红利带来了互联网业务的快速发展,巨大的流量也带动了技术的不断革新,研发的模式也在不断变化.传统企业纷纷效仿互联网的做法,结合DevOps进行数字化的转型. 通常提到Dev ...

  7. 专访姚冬:All-in-One,智能时代下企业需要更快速的变革

    2017年,msup将咨询服务列入公司发展战略目标,并邀请前IBM大中华区技术总监姚冬成为咨询合伙人.近一年来,msup在咨询服务方面持续发力,与包括百度.平安科技.用友等在内的大型公司形成企业合作联 ...

  8. 企业架构如何实施的简介(TOGAF深度好文)

    本文来自企业架构学院: BangEA:如何实施企业架构? IT不仅是开展业务的手段,而且正在迅速演变为业务,IT绩效会直接影响企业的盈利能力,但很多企业并没有适时或充分的让IT组织参与业务的规划和决策 ...

  9. 从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?

    作者 | 易立 阿里云资深技术专家 导读:从十余年前的各种分布式系统研发到现在的容器云,从支撑原有业务到孵化各个新业务,企业的发展离不开统一的.与时俱进的技术架构.本篇文章从企业分布式应用架构层面介绍 ...

随机推荐

  1. 【LeetCode】49. Group Anagrams 解题报告(Python & Java & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序+hash 日期 题目地址:https://le ...

  2. 【LeetCode】112. 路径总和 Path Sum 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 回溯 BFS 栈 日期 题目地址:https ...

  3. Beautiful Walls

    [1553] Beautiful Walls 时间限制: 1000 ms 内存限制: 65535 K 问题描述 To simplify the building process, XadillaX b ...

  4. 【C++】leetcode竞赛笔记

    *注--代码非博主本人所写,仅供学习参考,侵删 20200516双周赛: 1 to_string(int a) 将a转换成字符串形式 2 gcd(int a,int  b) 返回a,b的最大公约数,若 ...

  5. 编写Java程序_输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。

    要求说明: 输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪.若用户输入序号出现越界,则提示错误. 运行效果如图: 实现代码: import java.util.Scanner; pu ...

  6. 使用 JavaScript 的 HTML 页面混合、根据在下拉列表框中选择的内容,决定页面效果,用户在下拉列表框中选择页面将要使用的背景颜色

    查看本章节 查看作业目录 需求说明: 根据在下拉列表框中选择的内容,决定页面效果 用户在下拉列表框中选择页面将 要使用的背景颜色 当用户选择橙色时,页面背景将显示为橙色 实现思路: 用表单 <s ...

  7. UML 基本模型元素

    目录 1. 结构模型元素 (1)类(class) (2)接口(interface) (3)协作(collaboration) (4)用例(use case) (5)活动类(active class) ...

  8. Kafka集群安装Version1.0.1(自带Zookeeper)

    1.说明 Kafka集群安装,基于版本1.0.1, 使用kafka_2.12-1.0.1.tgz安装包, 其中2.12是编译工具Scala的版本. 而且不需要另外安装Zookeeper服务, 使用Ka ...

  9. Nginx_全局命令设置

    刚安装好的Nginx, 命令需要去sbin目录执行,比较麻烦,设置下全局命令,就无需进入nginx的sbin目录执行nginx命令了 1.创建文件 vim /etc/init.d/nginx 把下面代 ...

  10. mysql数据库存放的路径以及安装路径

    mysql数据库存放的路径以及安装路径 1.查看mysql的存放路径 1.查看数据库的存放路径 进入mysql终端 mysql>show variables like '%datadir%'; ...