此篇文章转自“云效”公众号,内容略有修改,在这里非常感谢“云效”对我司技术大大的详细采访。
全文共2533字,消化约15分钟。
案例重点介绍
通过云效流水线功能大大提升了内部研发项目的发布效率和质量,实现初始项目2天快速上线。外部托管项目通过云效需求管理、缺陷管理功能,有效提升了工作效率,在与外部客户、供应商的沟通效率上提升了50%以上。
关于项目的一些痛点
内部项目
项目过多依赖手工操作,发布效率低下且难以形成知识积累。在项目上线时,构建部署主要都是人工在服务器上进行,安装构建工具、执行构建过程都可能会遇到各种问题和进行解决,耗费时间比较长。
即便有文档或者操作手册,又往往存在更新不及时的问题,新同学一般要通过多次询问和自己登录服务器操作等方式才能确定正确的构建和发布步骤。
发布出错率高,没有有效的回滚机制。很多项目类型的开发语言是PHP等脚本语言,部署方式是在服务器的部署路径下直接更新代码,并且直接在部署路径进行构建,一旦操作错误或者遗漏,就会影响线上服务。
同时一旦发布出现问题,判断回滚的版本需要人工根据代码提交记录进行确定,耗时长且容易回滚出现新的问题。
外部项目
没有一个很好的协同管理工具能把流程串起来。外包大师为追求高质量效果,导致整体项目周期偏长,之前对于交付链条很长的项目管理过程,更多的是通过一系列不同的工具管理项目实施的不同阶段,比如石墨文档、Teambition、Project、Jira等。
很长时间内,没有找到一个很好的协同管理工具能一次性的串起这个流程,并解决其中的众多问题。如:需求变更管理,版本迭代管理、成员权限管理、代码分支管理、问题追踪管理等等。
为了解决这些问题,本人决定采用阿里云云效一站式研发协同解决方案与ARMS业务实时监控服务,从而实现快速上线的效果。
内部项目
对内部项目,我们主要想提高发布效率和稳定性,同时减少构建和部署环节对人工操作的依赖。考虑过三个方案:
使用Jenkins或者Teamcity等持续集成解决方案
阿里云的codePipeline
阿里云云效
评估下来,方案一虽然比较灵活,可以满足需求,但初始的安装配置成本和维护成本都比较高,而且作为基础设施服务一旦出现问题,团队目前并不擅长解决,所以放弃。
方案二codePipeline很早之前使用过,功能相对单一,主要提供流水线服务,界面操作也不够友好。
最终,本人选择了方案三。在云效的使用上,我们采用了新项目先尝试,老项目后迁移的思路,一方面积累云效使用经验,同时也避免因为研发流程调整影响已有项目的迭代和稳定性。
目前我们一个项目在云效上从开始准备部署到可访问,一般需要0.5天~2天(取决于是否之前已经配置过相同类型的项目),会经历以下步骤:
第一天
1. 采购和添加服务器 (耗时1h,如果之前没有相同环境,需要安装运行环境0.5d)
创建用于测试环境或者生产环境的ECS,在云效企业设置中添加主机到云效。我们针对不同的语言运行环境创建了不同的镜像,做到购买ECS后,不需要额外配置就可以马上投入使用。
2. 创建云效应用 (耗时1h)
每个可以独立进行构建和部署的研发项目,注册为一个应用。指定代码仓库、所属项目以及项目语言类型,在云效中创建应用。
3. 配置流水线 (耗时2h)
我们的流水线一般只保留两个步骤,构建和部署,测试环境的部署和正式环境的部署拆分为多个流水线。如果是之前没有配置过的项目类型,构建命令和部署命令一般是需要调试时间比较长的:
a) 构建命令,不同语言构建命令不一样。我们公司主要使用的PHP7、Java8、Nodejs8在云效默认的构建环境已经都支持了。
b) 配置应用环境,为应用的每个环境指定服务器和部署路径、部署命令。
构建命令和部署命令都可以,可以先在服务器或者本地手动执行构建成功后,再配置到云效,后续相同类型的项目可以进行复用。
第二天
4. 构建和部署 (耗时1h)
流水线编辑完成后,就可以运行调试了,顺利的话可以一次性成功,实际是往往因为代码问题或者服务器环境导致不能一次性成功,好在云效在构建和发布阶段都有详细的日志输出,可以看到构建命令和部署命令的执行过程和输出,用于排查和修复问题。
5. 访问入口配置 (耗时1h)
流水线运行成功后,应用已经可以对外提供服务了,我们的大部分项目都是web项目,这个时候会新建负载均衡指向新部署的服务,接着配置域名到负载均衡的IP地址,就可以提供给测试同学测试或者用户访问使用了。
6. 异常回滚 (耗时<1h)
日常发布会,难免会有一些情况导致线上服务运行异常,
借助实时业务监控(arms),可以把关键错误日志、核心业务指标有效监控起来, 一旦发布后收到报警或者指标异常 ,在云效中直接操作回滚就可以,云效的回滚会清晰的列出历史版本用于选择,同时回滚直接使用之前构建成功的结果,不需要重新构建,回滚速度比手动服务器操作要快出一个数量级。
在通过新项目中熟悉了云效的使用并体验到云效带来的便利后,我们把老项目也进行了迁移,这样在云效中,就能看到公司所有的研发项目,很大程度上避免了黑盒子项目的存在。
外部项目
在外面委托项目中,我们作为平台方,需要协调甲方客户和乙方供应商团队,云效平台正好解决了在线协同问题,把甲乙方很好的联系在一起。
如下图:可通过成员管理把甲方参与人员和乙方开发团队添加到项目成员中,甲方可以看到项目实际进展,乙方也可以及时更新项目进展。
进度管理:当项目经理将工作包拆解到具体模块并指定开发负责人后,负责人可按实际完成情况勾选任务,就可以相对准确的显示项目的实际进度。
范围管理:对于项目实施过程中,新增的需求,产品经理可以通过手动添加和自动导入两种方式更新或调整需求,并按模块和版本进行分配责任人,如下图:
效果检验:开发完成的代码推送到远端分支,就可以自动部署到到测试环境,平台QA和甲方客户就可以可及时检验效果。
BUG追踪:测试负责人可以添加BUG修复任务到缺陷模块 并指定任务负责人,对于开发团队成员,可以单独查看自己名下的待解决BUG,如下图:
获得成效
云效平台在我们的内部研发项目的迭代开发和外部托管项目全周期管理中发挥着重要作用,从使用前后的一些数据显示研发效能上有了显著提升。
内部项目
发布效率:10分钟的手动命令行操作 -> 5分钟的界面自动化操作。
回滚速度:10分钟人工确认操作-> 2分钟自动化操作。
发布质量:手动发布/回滚出错或者遗漏:10% -> 无。
新人学习发布上手时间:2天->0.5天。
研发项目基础信息:个人经验和口口相传 -> 清晰可靠的系统记录。
外部项目
多方协同不再需要通过每日例会或日报的形式汇报项目进展,参与项目的甲方、平台方、分布式研发团队都可以直观的看到项目进展,沟通效率提升了50%以上。
需求可按模板导入,对于大量需求需要初始化录入时,导入的功能大大提高了效率,以及新增需求的录入、管理等,相比之前人工通过Excel更新功能列表并同步给项目团队,整体范围管理的效率提升了30%。
代码的自动化构建部署,验收效率提高了20%。
如有问题,欢迎在官方微信公众号留言,微信公众号搜索“外包大师”点击关注即可。