本期主题:基于大家在研发过程中遇到的痛点,我们如何通过引入敏捷、DevOps及全流程工具链来解决痛点问题?集团DevOps平台建设现状及成果,DevOps试点推广及DevOps社区又取得了哪些成绩呢?
说到敏捷,集团IT从15年开始在研发部门进行敏捷试点,然后逐步推广落地,截至目前敏捷模式也进行三四年。现在每天早晨各研发团队的站会、每周的规划会、验收会亦随处可见。那么在敏捷研发过程中又遇到了哪些问题呢?
常用敏捷方法包括:Scrum,kanban,TDD,xp等。咱们中心主流的是Scrum,随着精益思想的引入,小部分团队使用了kanban。近两年中心在逐步引入DevOps。
image.png
研发痛点:流程长,用户体验不好
image.png
研发过程常见关键词:变更、排期、提测、发布。开发人员可能会抱怨业务需求不明确,业务需求加塞;业务部门可能会抱怨需求上线太慢流程太长,进度不透明。测试部门可能会抱怨提测版本太乱、质量太差。各环节的人抱怨跨部门协作成本太高各环节工具没有打通全流程数据不透明,缺乏反馈机制等。总之这些状况看起来有些凌乱,怎么办呢?好比去餐厅吃饭,人工下单+反复催单和pad自助下单+实时查看进度两种模式,自然是后者会给顾客带来更好的体验。同样如果我们将研发过程透明化,协同平台统一化、过程数据可视化,对解决各环节的痛点,相关人员的抱怨会有较大的作用。
image.png
精益看板可视化
image.png
利用JIRA精益看板实现产品/需求的可视化管理,根据需求流程在看板上进行个性化列配置,根据需求/产品人员的吞吐量设置各状态列的最大最小容量,通过卡片颜色标注需求的优先级,并设置到期日卡片变色提醒。方便业务方随时查看每个需求owner、排期、最新状态等,减少无效沟通。
image.png

多层级需求管理
如果一个需求涉及多个系统,那么可以在JIRA上实现需求的多层级拆分及跨团队/项目分配父需求详情界面可直接查看子需求的归属和状态,子需求界面同时可以看到关联的父需求。同时左侧“需求”菜单下可以看到所有需求及层级结构,给跨系统协作提供了非常大的便利性。
image.png
需求看板,需求树结构更多的是产品/需求人员会比较关注,但开发人员可能更多关注自己的开发任务,那么可以通过需求拆分子级的方式把开发任务分配到专门的开发scrum板上。这样既可以实现需求和关联开发任务的联动,也可以满足不同角色人员有各自独立的可视化操作界面
image.png
需求管理-测试-Bug可追溯
image.png
开发人员应该有过这样的经历,测试人员在测试过程中提交bug给开发,开发审核后退回,然后就是线下沟通:到底是哪个测试用例,哪一步测出的bug,到底有没有复现等。那么这个问题我们只需要将需求和测试用例直接关联,测试用例和bug直接关联,就可以随时追溯啦。在JIRA上可以直接在某个需求下面创建测试用例,直接执行测试用例并创建bug,上传截图等。这样相应的需求界面下既可以看到关联的用例,也可以看到用例执行产生的bug
image.png

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

需求代码相关联
上面已经谈到了需求-测试-bug的关联,如果某天用户测试发现某个需求缺陷的时候,开发人员是否能快速找到相应代码定位问题呢?那么此时需求和代码的一一对应就非常关键,我们可以通过在JIRA对应issue上创建分支的方式实现需求和代码的关联,代码上的任何操作都会在Jira issue上进行详细的记录。便于以后问题追踪和快速定位。
image.png
引入持续交付流程
利用现有工具可以帮助大家实现研发透明化管理,但是更重要的一点是需要进行流程优化IT需求历经五个系统M-RDMS-JIRA-TMS,且系统之间并未实现完全打通,需要很多线下沟通和手工操作。全过程涉及审批节点多达数十个,且各节点没有完全透明化。这样产生的问题就是环节很长,反馈很慢,运维线上个案多。那么为了解决这些问题,在DevOps试点方案里主要应用了基于JIRA和Jenkins流水线的工具平台。比如利用JIRA和Wiki进行需求、任务、测试及bug管理,并实现了JIRA和流水线平台的集成,从而满足业务的快速稳定交付
image.png

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

image.png

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

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

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

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

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

研发痛点:版本管理缺失
版本管理通常也是大家比较关心的一个问题,在某些故障讨论会上可能会听到代码通过测试的版本和发布版本不一致,导致上线后出现问题。然后开发,测试,运维难免扯皮。
引入版本管理
为了避免这类问题,我们引入了版本管理机制。从需求到发布保持版本号紧密关联。引入Jfrog保证开发、测试、发布获取单一可信源。JIRA发布版本号和Gitlab的代码版本号关联,代码版本和发布包版本关联,便于线上问题追踪定位和快速恢复。
image.png

度量反馈-持续改进
著名管理大师德鲁克说过如果无法度量,就无法管理。同样软件研发也需要通过度量获取改进点,在优化流程的同时提高研发效率。首先我们要设计度量指标体系,主要是从需求-开发-测试-发布-运维这5个阶段分别来设计度量指标,包括:需求交付周期,开发交付周期、bug逃逸率,发布前置时间,发布频率,故障恢复时间等关键指标。研发过程的所有指标数据都在TDS度量模块进行展示,帮助研发团队通过度量指标发现研发过程问题,持续改进,最终实现研发提效
image.png
image.png
集团DevOps社区精彩活动
集团DevOps社区于2019年正式成立,成员来自集团各研发部、子公司DevOps实践爱好者。社区伙伴先后参加了DevOpsDays Beijing , DevOps国际峰会,社区伙伴受邀参加GOPS全球运维大会演讲和AUG演讲;成功举办了泰康在线DevOps实践专场沙龙,受到了集团及子公司、外部同业公司的关注和积极参与。集团于2019年7月接受企业级DevOps赋能共存计划正式授牌,为开源DevOps社区贡献力量。

泰康云DevOps平台实践之:企业级软件制品仓库

1.前言

TDS,TaikangcloudDevOps Service(泰康云DevOps服务平台)是整合敏捷开发与DevOps的研发管理工具,提供产品规划、项目管理、Git/Svn代码托管、Sonar代码检查、Jenkins持续集成和持续发布(CI/CD)、制品管理等能力,让复杂的研发协作更简单,帮助组织团队来完成软件生命周期管理,从而更快、更频繁地交付更稳定得软件。从需求管理到代码审查,优化开发流程,简单易用,让开发流程更高效。

  • 是一款企业级软件开发协作系统。
  • 实现细粒度的访问控制,管理 Git 存储库,确保代码的安全。
  • 实现高效的Sonar代码审查功能,协同合并请求,保障代码提交的安全性及专注性。
  • 项目中使用JIRA任务管理与代码托管无缝衔接,保障开发流程的可追溯性。
  • 文件管理、Wiki模块可记录整个项目的来龙去脉,让项目协作清晰便捷。
  • 使用Jenkins持续集成le提供安全、稳定、高效的企业软件开发协作平台,并提供Pipeline As Code的配置模式;

image.png TDS是泰康保险集团沉淀多年的研发运营一体化支撑体系,承担着数百款业务CI/CD的使命。tds的服务支撑覆盖到人寿、健康险、车险、医疗、养老、护理等不同领域的业务,这些业务来自于自研或者代理,研发团队间的技术栈以及设计理念不同导致了架构差异性和复杂性,也给CICD应用在包交付模式和灵活的编排上提出更多的挑战。研发与运维团队职责不同和环境差异化,在版本交付过程中版本因环境差异带来的问题,导致沟通成本非常高。研发团队在日常版本构建过程中,往往容易忽略代码检查以及安全扫描的事项,版本包外发现导致了业务出现问题等。以上种种问题,都使得CICD的产品设计理念以及如何串连各大工具链,让业务在安全保障,版本稳定,效率提升上获得到最大收益,成为了CICD设计和实践的首要任务和重要挑战。

2.TDS的CI/CD设计与实践

image.png
DevOps的基础是自动化,需要一系列的工具来支撑,目前业界主流方式是基于开源工具链打造稳定可靠、敏捷的CI/CD流水线;Jenkins凭借其良好的设计和强大的社区成为了我们的选择,jenkinspipeline 2.0强大而灵活,是企业级DevOps流水线实现的不二选择;虽说是研发与为一体化,然而开发团队和运维团队对流水线的需求是不一样的,研发团队偏向CI,而运维团队偏向CD,对工具链平台还有流水线的设计提出了挑战;TDS平台由原来的CI/CD融合流水线模式演进到了CI、CD可自由分离+自由组合的模式;在CI/CD分离的模式化,原有的简单FTP模式不再适应,对制品平台的管理和使用提出了更高的要求;
image.png
所以建设企业级的统一软件制品仓库成了一个必然选择,需满足企业级的高可用、多租户、多项目、安全扫描、灵活的质量阈、多组织架构人员等需求;
image.png

3.使用 JFrog Artifactory实现全球化仓库管理和工具链集成

企业级制品仓库需具备的能力:

软件制品是指由源码编译打包生成的二进制文件,不同的开发语言对应着不同格式的二进制文件,这些二进制通常可以直接运行在服务器上;制品库(Repository Manager)用以管理源代码编译后的构建产物,支持Docker、Maven、Helm、npm、PyPI 包等常见制品库类型。制品库可以跟源代码协同进行版本化控制,可以与本地各构建工具和云上的持续集成、持续部署无缝结合,并支持漏洞扫描等特性,是一种企业处理软件开发过程中产生的所有包类型的标准化方式。起了两方面的作用:
· 作为外部第三方制品库的内部镜像。
· 发布内部开发的制品。
软件厂商也是按照这个思路在操作,以市面上主流的产品 Nexus 的Proxy / Hosted、JFrog Artifactory的 Remote / Local Repositories,前者作为镜像后者作为内部库,但是等事情进一步复杂时,一些概念开始变得混乱。以 Maven 为例,并不是所有的 Jar 包都是这个体系的,如 IBM DB2 的 JDBC Jar,在 Maven Central Repository 或其他Public Repository 都不存在,只能去相应厂商网站手工下载并上传至 Hosted / LocalRepository 供内部引用。从功能上讲,这么做没有问题,绝大多数用户也是如此操作;但是无论从终端用户的使用、还是服务本身的运维,其实是将两件不同性质的事情混淆在了一起。无论是从 Proxy / Remote Repository 自动镜像,还是用手工方式下载上传到Hosted / Local Repository(可以看作手工镜像),这些制品本质上都是第三方库;而内部开发构建并发布到 Hosted / Local Repository 的制品,却是企业自己的软件资产。这两者在特性上的差别比想象中要大得多,本文不做展开,以后另外发文展开讨论;我们最终选择了Jfrog 的Artifactory做为企业Repository Manager,其能提供强大的全栈软件支持、元数据收集、安全扫描、主流DevOps工具链支持、高可用架构等能力;

新CICD流水线功能架构:

为适应复杂的软件交付流程,tds团队搭建了 tds pipeline2.0,包括Git/SVN,Jenkins集群,Artifactory制品及元数据仓库,使用SonarQube做代码检查,Jfrog Xray做二进制包检查,使用tds的标准运维流程进行非容器的部署使用及Helm Kubernetes的容器部署;鉴于各事业部和业务开发团队的管理需求,tds团队利用artifactory的repos-path灵活搭建各级制品仓库,配置权限,使用snapshot-release管理制品的生命周期;
这样的好处是,Jenkins集群无需在临时存放构建物,做到了CI和CD的完全分离,构建环境更加灵活、资源利用率也大大提高,开发团队可以更加快捷的拿到历史构建物并进行版本管理,关联CI数据。QA团队可以基于构建物发起部署,挑选上线包,协作更加灵活;
image.png
4.小结
本文就软件制品仓库对于DevOps交付实践的作用做了简述,实现CI/CD的完全分离和元数据的管理是构建企业DevOps平台的必由之路,这也是进行软件生命周期管理和质量分析、研发度量的基础,微服务和云原生对CI/CD提出了新的要求:更高、更快、更强;下一步泰康云TDS团队将继续加强DevOps工具链的建设和开发,对接运营体系工具:监控、链路追踪、CMDB、微服务网关等,为业务开发提供强有力的支持,基于云提供更便捷的研发基础设施。