【如下为分享实录,有删节】 今天分享的题目是《企业CICD规模化落地》,所以咱们不会侧重讲解CICD是什么以及怎样作CICD,而是你已经知道怎样“玩转”CICD了,要如何在一个比较大的企业中规模化地落地。 研发流程与持续交付简析 持续交付是随着互联网的迅猛发展逐渐普及的一种研发模式,它具备“快速反馈”“质量内建”“自动化”“开发自运维”等特色。html
这种研发模式主要包含如上图所示的四个环节,“分支管理”“测试验证”“制品管理”和“发布”。在业界有不少工具支持这些操做,在云效产品矩阵中也有对应的产品提供相应功能。 在一个中小型的研发团队(好比5-10人),不管你是使用商业软件仍是开源的工具,通过一段时间的学习,你均可以把“持续交付”作起来。可是当须要规模化落地以后,就有更多的问题须要考虑,如:web
持续交付在阿里巴巴的规模化 接下来简单了解一下“持续交付”研发工具在阿里巴巴内部的演化历程。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。测试
【关于云效】 云效,企业级一站式DevOps平台,源于阿里巴巴先进的研发理念和工程实践,致力于成为数字企业的研发效能引擎!云效提供从“需求 ->开发->测试->发布->运维->运营”端到端的在线协同服务和研发工具,经过人工智能、云原生技术的应用助力开发者提高研发效能,持续交付有效价值。 【云效官网】https://www.aliyun.com/product/yunxiao 【公测指南】https://developer.aliyun.com/article/756207 【申请公测】https://devops.aliyun.com 【学习路径】https://help.aliyun.com/document_detail/153739.html 【开发者社区】https://developer.aliyun.com/group/yunxiao 【精彩活动】云效公测开启 「产品体验官」招募中~ https://www.aliyun.com/activity/yunxiao/Beta2020阿里云
欢迎扫码加入云效开发者俱乐部(钉群:34532418)