本文作者:弗止,阿里云云效技术专家;辰颜,阿里云云效高级开发工程师
本文源自:阿里云云效团队出品的《阿里巴巴DevOps实践指南》,前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。
云端开发指开发者可基于云平台完成编码、测试、发布等研发流程。一个完整的云端开发平台不仅是提供了一个云端的编码环境,还提供了一整套研发工具和配套设施,让开发者做到在云端即可完成应用程序的需求、编码、测试和运维的全生命周期管理。
传统的本地开发的问题
如下图所示,在传统的开发模式中,企业研发人员通常在本地完成代码的编写和测试,然后把代码推送到远端服务器,通过一系列的构建和集成,最终发布到生产环境,并持续利用线上的运维体系完成线上系统的监控和运维;同时,企业也会采集部分研发过程中的关键数据,用来度量团队及个人的效能。
随着各种软硬件技术逐渐更替,公司规模也越来越大,为了适应这种变化:
- 公司需要不断为企业研发人员配备合适的本地研发工具(如:多核高内存的计算机设备、Mac 笔记本电脑),这些设备可能价值不菲,而且需要定期的更新换代;
- 新加入的员工,在正式开始开发前,需要配置复杂的本地开发环境,安装特定的软件及插件,并熟悉项目的研发流程及各个线上系统;部分项目因为网络配置等问题,可能第一时间还无法在本地启动,还会耽误不少额外的配置及调试时间;
- 公司需要投入较多的资源,才能构建起匹配管理者需求的效能度量系统和安全管控系统,并且因为云端体系天生对开发者本地环境的弱管控性,效果只能差强人意;
阿里巴巴也不例外,随着近些年各项业务的飞速发展,人员的快速扩充,如何解决发展过程中带来的类似问题变得迫在眉睫。而云端研发作为一种新兴的技术形式,其独特的优势恰好可以用来解决上述问题。
云端开发的典型应用案例
案例 1:前端组件的开发
在阿里内部,存在大量的基于 Node.js 构建的前端工程,这些前端工程普遍采用模块化的组织方式,在开发过程中会随着需求迭代产生众多的模块(或组件)。同时,有些前端工程会邀请业务方参与共建,即由提出功能需求的团队在大的标准下自行开发组件,并发布上线,在平台中集成自己的场景。
在这样的背景下,组件的开发会被高度的抽象,大部分的步骤都可以由工具辅助完成(如下图中,业务开发人员只需要关注自己的业务逻辑即可),这样既提升了研发效率,又提升了组件的开发质量。
前端组件开发过程:
云端开发的开箱即用,恰好可以解决类似的问题。开发者打开浏览器就是一个配置好的环境,实现零配置上手;而环境配置可以由项目组的资深同事维护,配置好针对某个项目的系统版本、程序运行时、SDK 和 IDE 插件集合。相比使用本地的研发工具,云端开发可以实现:
- 研发流程的产品化,从组件的新建到最终的发布一气呵成,不用再在多个平台工具上来回跳转;
- 屏蔽用户操作系统的差异,提供统一的研发环境,不用再解决 Windows/Mac 的差异,不用担心本地Node.js 的版本问题;
- 所有环境都会预装好必要的开发提效工具,如:规约扫描和修复工具、预览调试工具、各环境发布工具等;
- 充分释放本地磁盘空间,不用担心磁盘被 node_modules 占满;
案例 2. 代码安全管控与研发过程数字化度量
在政务、金融以及部分高科技企业的研发场景中,对代码的安全管控要求极其严格。但近几年,公司内部源代码泄露的事件时有发生,有的被明码标价进行出售,标价数十万甚至上百万美元;有的直接被公开在网络上,任何人都可以访问下载。一旦发生类似事件,将会直接或间接造成商业信息泄露及公司声誉受损。
当使用本地开发时,源码的传输环境、本地的持久化介质不可控,对于员工有意泄露源码的行为似乎无可奈何。当使用云端开发时,一切都迎刃而解:开发者可以从代码库或需求直接打开网页开始云端开发,研发过程中代码不落本地磁盘,既能减少传输风险,又避免了员工本地环境被植入木马、从而在不知情的情况下泄露源码的可能;同时,在云端开发环境中可以对用户的浏览、拷贝行为做不同程度的管控,结合告警和系统自动拦截,可有效降低源码泄露的风险。
在阿里内部,当涉及到对保密性要求极高的项目,或者当企业外部成员参与对代码保密性有要求的项目时,我们会推荐项目团队使用云端进行研发,从而有效防止源码的泄露。
此外,随着越来越多的企业进入到数字化转型阶段,管理者期望能更加全面的看到企业员工的投入与产出,并且针对项目人员分布与研发过程效率做出更加及时的调整与改进。在过去,所有的数字化信息都依赖人工的反馈和统计,反馈的是否准确、统计过程中是否有纰漏都会直接影响管理层的判断。但如果把研发过程搬到云上,所有的研发过程数据就能生在云上、用在云上,想要借助数字化提升研发效率变得更加容易。
在阿里内部,团队中经常会出现一名正式员工带领多名企业外部成员完成项目的情况。在需要对企业外部成员的工作进行绩效评定时,传统的评定方式通常是参考需求完成数量、代码缺陷率等指标,但实际工作中需求有大有小、有难有易,完全基于结果指标进行评定很难做到公平公正,让优秀的员工脱颖而出。借助云端开发,可以让所有研发过程中的数据也透明出来,如各需求的编码时长、临时版本发布次数、过程代码与最终有效代码的比例、单位时间代码产出量等。通过结合研发过程数据,也可以让绩效评定更加透明公正。
总结
云端开发具备灵活定制、开箱即用的特点,借助好这两个特性,就可以创新性的解决掉传统本地开发过程中的顽疾。除了上述两个案例外,我们认为,当前适合云端开发落地的场景还可以是:
- 云原生场景中的轻量代码开发,如 Serverless 场景,这类场景中研发人员只需要集中式的编写业务逻辑,大量的框架类代码已被默认隐藏,并且调试、部署方式有别于传统研发过程,更适合云端开发的落地。
- 各类垂直化的场景,这类场景通常需要有针对性的定制,与特定的线上系统进行打通,只要能利用好云端开发灵活定制的特性,就有望实现开发阶段 10 倍效能的提升。
目前,阿里巴巴内部的云端开发平台目前已通过阿里云云效对外输出
免费下载《阿里巴巴DevOps实践指南》
阿里巴巴合伙人和业界多位大佬力荐、何勉、陈鑫等17位阿里资深技术专家联袂出品、阿里十年DevOps经验沉淀总结、阿里巴巴DevOps落地实践一本通。
前往:https://developer.aliyun.com/topic/devops,下载完整版电子书。