泰康保险集团DevOps工具链落地实践

说到敏捷,泰康保险集团IT从15年开始在研发部门进行敏捷试点,然后逐步推广落地,截至目前敏捷模式也进行三四年。现在每天早晨各研发团队的站会、每周的规划会、验收会亦随处可见。那么在敏捷研发过程中又遇到了哪些问题呢?

常用敏捷方法包括:Scrum、kanban、TDD、xp等。咱们中心主流的是Scrum,随着精益思想的引入,小部分团队使用了kanban。近两年中心在逐步引入DevOps。 如果你想和更多DevOps技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态

研发痛点:流程长,用户体验不好

研发过程常见关键词:变更、排期、提测、发布。开发人员可能会抱怨业务需求不明确,业务需求加塞;业务部门可能会抱怨需求上线太慢,流程太长,进度不透明。测试部门可能会抱怨提测版本太乱、质量太差。各环节的人抱怨跨部门协作成本太高,各环节工具没有打通,全流程数据不透明,缺乏反馈机制等。总之这些状况看起来有些凌乱,怎么办呢?好比去餐厅吃饭,人工下单+反复催单和pad自助下单+实时查看进度两种模式,自然是后者会给顾客带来更好的体验。同样如果我们将研发过程透明化,协同平台统一化、过程数据可视化,对解决各环节的痛点,相关人员的抱怨会有较大的作用。

精益看板可视化

利用JIRA精益看板实现产品/需求的可视化管理,根据需求流程在看板上进行个性化列配置,根据需求/产品人员的吞吐量设置各状态列的最大最小容量,通过卡片颜色标注需求的优先级,并设置到期日卡片变色提醒。方便业务方随时查看每个需求owner、排期、最新状态等,减少无效沟通。

多层级需求管理

如果一个需求涉及多个系统,那么可以在JIRA上实现需求的多层级拆分及跨团队/项目分配。父需求详情界面可直接查看子需求的归属和状态,子需求界面同时可以看到关联的父需求。同时左侧“需求”菜单下可以看到所有需求及层级结构,给跨系统协作提供了非常大的便利性。

需求看板,需求树结构更多的是产品/需求人员会比较关注,但开发人员可能更多关注自己的开发任务,那么可以通过需求拆分子级的方式把开发任务分配到专门的开发scrum板上。这样既可以实现需求和关联开发任务的联动,也可以满足不同角色人员有各自独立的可视化操作界面。

需求管理-测试-Bug可追溯

开发人员应该有过这样的经历,测试人员在测试过程中提交bug给开发,开发审核后退回,然后就是线下沟通:到底是哪个测试用例,哪一步测出的bug,到底有没有复现等。那么这个问题我们只需要将需求和测试用例直接关联,测试用例和bug直接关联,就可以随时追溯啦。在JIRA上可以直接在某个需求下面创建测试用例,直接执行测试用例并创建bug,上传截图等。这样相应的需求界面下既可以看到关联的用例,也可以看到用例执行产生的bug。

上面给大家介绍了实用的需求看板、多层级需求关联、需求测试关联,除此之外我们还需要关注数据报告。比如:燃尽图、速度图、累计流图、Sprint报告,通过这些报告发现整个研发过程的一些问题,便于我们持续改进。

需求代码相关联

上面已经谈到了需求-测试-bug的关联,如果某天用户测试发现某个需求缺陷的时候,开发人员是否能快速找到相应代码定位问题呢?那么此时需求和代码的一一对应就非常关键,我们可以通过在JIRA对应issue上创建分支的方式实现需求和代码的关联,代码上的任何操作都会在Jira issue上进行详细的记录。便于以后问题追踪和快速定位。

引入持续交付流程

利用现有工具可以帮助大家实现研发透明化管理,但是更重要的一点是需要进行流程优化。IT需求历经五个系统M-RDMS-JIRA-TMS,且系统之间并未实现完全打通,需要很多线下沟通和手工操作。全过程涉及审批节点多达数十个,且各节点没有完全透明化。这样产生的问题就是环节很长,反馈很慢,运维线上个案多。那么为了解决这些问题,在DevOps试点方案里主要应用了基于JIRA和Jenkins流水线的工具平台。比如利用JIRA和Wiki进行需求、任务、测试及bug管理,并实现了JIRA和流水线平台的集成,从而满足业务的快速稳定交付。

研发痛点:生产交付人工干预多

原有研发流程存在诸多人工干预环节,需求从业务进入到IT前需要经过三个工具,多层人工传递。项目经理通过线下沟通方式请运维人员手工创建Jenkins Job;测试/生产发布环节,开发人员也需要通过线下沟通请运维人员手工配置预生产环境和生产环境,然后由运维人员实施手动发布。这些人工干预不仅降低了研发效率,更重要的是可能会导致预生产环境和生产环境上的发布包不一致。

提高研发流程自动化水平

那么提高研发过程自动化水平成了一个必然趋势。因此我们引入了全流程的工具链,在一定程度上实现了端到端交付的自动化。比如需求端引入JIRA实现了需求-人工测试-Bug管理,Gitlab进行统一的代码管理,已Jenkins为核心的Pipeline实现了自动化构建部署,其中JIRA和GitLab,GitLab和Jenkins流水线都是打通的,所有数据可以通过统一的日志平台ELK收集并通过监控平台进行实时预警或者告警,全过程的知识管理都落到了统一的知识管理平台wiki上。整个集成工具链采用的都是业界通用的商用工具或开源工具,比如JIRA,Gitlab,Jenkins,splunk等。

引入Sonar静态代码扫描

引入了Sonar静态代码扫描,定制统一的Sonar规则,并根据各开发团队的实际情况渐进式的导入和推广,目前集团质量团队正在全面推广各研发部接入Sonar,并且定期出具Sonar质量报告,督促开发团队不断提高自己的代码质量。

搭建统一的TDS平台,设计个性化流水线

搭建了以Jenkins Pipeline为核心的CICD平台,TaiKang Cloud Service以下简称TDS平台。平台基于私有云平台集成了Jira、Gitlab、Jenkins,Sonar,Jfrog等持续集成工具。通过Gitlab实现TDS平台统一的用户管理。平台主要实现构建-打包-发布流水线快速配置和执行,同时关联了流水线项目对应的需求、代码库,制品库,自动化测试等,初步实现了端到端交付的效果。

研发痛点:缺乏质量关卡,测试成本高

引入DevOps之前,研发过程有效单元测试、自动化测试覆盖不多,更多的是依赖测试团队的人工测试来提供质量控制。同时测试准入准出标准和上线规范并不完善,直接导致测试成本高,测试环节容易成为瓶颈。

流水线关键环节设置质量门禁

为了进一步提高研发质量,引入DevOps流水线,并在关键环节设置了质量门禁,比如流水线构建结束进行代码扫描和单元测试,达标后才能进入下一环节。发布测试环境后需进行集成测试和压力测试,相应测试通过后才可以生产部署,部署完成后还需进行回归测试。层层质量关卡通过后才可以正式提交用户使用,一定程度提高了交付质量。

研发痛点:版本管理缺失

版本管理通常也是大家比较关心的一个问题,在某些故障讨论会上可能会听到代码通过测试的版本和发布版本不一致,导致上线后出现问题。然后开发,测试,运维难免扯皮。

引入版本管理

为了避免这类问题,我们引入了版本管理机制。从需求到发布保持版本号紧密关联。引入Jfrog保证开发、测试、发布获取单一可信源。JIRA发布版本号和GitLab的代码版本号关联,代码版本和发布包版本关联,便于线上问题追踪定位和快速恢复。

度量反馈-持续改进

著名管理大师德鲁克说过如果无法度量,就无法管理。同样软件研发也需要通过度量获取改进点,在优化流程的同时提高研发效率。首先我们要设计度量指标体系,主要是从需求-开发-测试-发布-运维这5个阶段分别来设计度量指标,包括:需求交付周期,开发交付周期、bug逃逸率,发布前置时间,发布频率,故障恢复时间等关键指标。研发过程的所有指标数据都在TDS度量模块进行展示,帮助研发团队通过度量指标发现研发过程问题,持续改进,最终实现研发提效。