在2018云栖大会南京峰会企业级互联网架构专场上,由阿里巴巴研发效能高级技术专家陈鑫带来了“1682亿背后的“企业级”高效持续交付”的主题分享,从技术管理者的烦恼开始引入持续交付与DevOps,对阿里DevOps落地和实际案例进行了介绍。
数十款阿里云产品限时折扣中,赶快点击这里,领券开始云上实践吧!
直播视频请点击
以下为精彩视频内容整理:
技术管理者的烦恼
一名开发工程师的日常通常首先要拉分支,每一个研发团队都有自己的研发规范,我们必须要遵守这个研发规范,才能做到日常的转接的迭代。然后会进行本地的开发验证、持续集成、合并请求、多环境测试、线上发布,在这个过程中其实是有很多重复工作的,比如说我们如何保证每个开发拉分支的规则是一致的,如何保证代码质量,如何保证测试环境的稳定性等等一系列问题。在持续交付领域有一个原则,如果这个问题需要花很多成本,是一件非常痛苦的事情我们应该尽早的尽量频繁的去做它,这个持续性叫做原则。我们的云上平台重点就是解决以上这些问题,提高效率。
日常开发工程师的烦恼就是管理者的烦恼,通常他们会面临研发流程混乱、测试质量无法保证、环境管理低效、繁杂的开源工具等。看到这些烦恼后首先就会想到云,第二个就是持续交付,可以看一下这些数据,资料来源:2016中国软件开发者白皮书 http://img.bss.csdn.net/201611171615373712.pdf
- 企业上云成为趋势
企业云服务使用率呈上升趋势,非公有云模式的部署方式目前是首选。调研数据显示,有27%的企业正在使用云服务,相较去年(2015年)增长了8个百分点,2014年仅为7%。出于对企业关键业务数据与资源的安全性考虑,六成以上企业会选择私有云或混合云的方式部署服务。 - DevOps成为业界热词
86%的企业不同程度都使用了DevOps相关工具。其中Docker和Jenkins作为实现DevOps的重要技术手段被使用最多,占比分别为47%和44%。 - 企业对开发工具和流程的认可
近8成企业有正规的开发流程来指导软件开发活动。近5成企业采用本企业自己制定的开发流程。6成以上的开发团队在使用开发相关工具。7成以上的开发团队认为开发工具能够提高开发效率和产品质量。21%的开发者非常期待公司在做年度计划的时候能增加在开发工具方面的预算。
持续交付与DevOps
如何应用持续交付与DevOps来提升软件交付效率呢?先介绍几个互联网热词。
1、持续交付:需求小批量流转、自动化流水线、短周期频繁交付,这是互联网的理念,尽快的去交付下去。
2、DevOps:它是一种方法和文化,自动化、度量、分享,基础架构即代码。
但这并不是名词解释,是想说明这两个问题一个是效率,一个是开发成本。后面会介绍阿里巴巴如何提升效率,如何减少成本。
高效协作与成本控制
研发模式全自动化
讲到研发模式首先想到的就是流水线,但流水线并没有解决研发模式的问题,如何保证一个企业里步调一致,我们抽象出来的分支模式、自由模式、GitFlow模式把它们直接做到产品里面。可以看到整个的拉分支的过程,合并的过程,发布的过程都在这个产品里解决了。这样就可以保证所有团队的步调是一致的。所以总结了三点,第一个是规范操作。第二个是高效协作。第三个是避免错误。
统一技术栈和运维栈
在这里把研发模式的交付流水线和视图都进行里统一。在代码推荐可以推荐 SpringBoot 、NodeJS、Go、PHP、Python、Ruby等等代码的框架,然后让它们创建新服务的时候所有技术站都是统一的。在运维模版,有Dockerfile的推荐还有标准化的环境等等一系列来规划它的运维。系统软件解决的是一个资源问题。其实可以看到云效在这的作用就是把这几层进行了黏合,它是所有的这些东西对开发者的唯一出口,就可以规划技术站运维站落地新技术,提高效率。
全云化测试平台
讲了效率的问题再来说说成本的问题,是如何降低成本的。每个团队都要有自己的测试,当他们突然出现的时候就不可控了。我们要做的就是通过规范化的接入把这些测试的方案全都接到云平台上。接入进来之后通过统一的调度,去提供机器资源,当所有的机器资源都在手里后就可以做很多事,使得测试平台特别高效。云效也支持企业自研自动化测试方案得接入。
测试环境隔离
大家不要小看了测试环境,阿里巴巴已经有数万台的线下物理资源,而且随着微服务理念的推广,服务出现了爆炸性的增长。不可能去给每一个链路部署一个单独的环境,那是怎么做的呢?整个环境分成三个部分,第一部分是开发机。第二部分是隔离环境,部署了三个服务,这三个服务开发了一组需求。在基础环境里部署了所有环境。所有请求进来就可以通过云效平台进行隔离和打标,所有请求进来先到隔离环境然后到基础环境。
企业级持续交付
一个平台真正做到企业级需要哪些元素,总结了五个部分:
1、应用创建:要有完整的应用元信息、代码推荐、技术栈模板和流水线编排;
2、测试验收:有静态扫描、代码规约、安全测试和质量评分;
3、标准环境:有标准stage、环境规划、标准运维模版和测试环境动态伸缩;
4、上线卡点:有管理审核、质量验收、测试卡点和发布窗口;
5、部署过程:有分批策略、过程监控、快速回滚和应用基线。
阿里DevOps落地
首先在阿里巴巴内部都是以DevOps理念以应用为中心的,以应用为出口,可以串联流水线发布测试环境等。在往外延伸到监控、DB等这些都是以应用为一条主线进行串联的。开发在定义应用,在定义应用周边这些服务的内容,所以说它其实就是在定义运维。潜移默化的把原来Ops的工作逐步的过度到Dev身上,最终实现了DevOps理念的落地。
容器化助力DevOps落地
在2016年双十一前阿里巴巴决定要进行全部服务的容器化,可以说阿里巴巴基本上进入了容器化的一个时代。图上是两个对比,左边是容器化前的决策。右边是容器化以后,所有的运维的存储都可以放到流水线里面,让它能够自助化的进行变更。可以说容器化的落地标志着阿里巴巴正式的进入了DevOps时代。
最佳实践
使用持续交付流水线
这是阿里巴巴内部的具有阿里巴巴特色的流水线,我们认为它是业内领先的,易于协作的。在前边日常工程中可能是开发在进行开发,预发过程可能是测试工程师完成,正式过程可能是运营工程师在进行部署。三者的所有行为都可以在同一个平台上进行展示,这个是业界目前还没有的。
无侵入的构建加速
目前支持所有语言的构建,因为云效提供了几种主流语言的构建和环境模版,也允许用户自定义自己的模版环境,接入到云效中。并且我们还做了一个自适应的构建缓存,来加速构建过程,而不需要额外的下载工作。系统都是阿里云进行安全认证的,保证代码和数据不会泄露。
全网部署能力
从图上可以看到,首先是共有云,还有专有云,还有自由主机。专有云上有没有购买云效,都可以通过阿里巴巴内部的Agent技术将自由主机接入到公有云效中。而且最大优势是不需要暴露公网的,非常安全。而且整个的Agent是阿里巴巴现在正全网部署的,能保证它的安全可靠。而且可以支持一键的接入,企业租户隔离。用户可以选择通过Internet/专线将自己的自由主机跟云效进行打通,对于普通开发者来说完全不需要关心它的资源在哪里,来实现这样一个比较高效的协作。
本文由云栖志愿小组陈欢整理编辑