《【杨浙】基于可视化流水线提升项目研发效能的实践.pdf》由会员分享,可在线阅读,更多相关《【杨浙】基于可视化流水线提升项目研发效能的实践.pdf(34页珍藏版)》请在三个皮匠报告上搜索。
1、基基于于可可视视化化流流水水线线提提升升研研发发效效能能的的实实践践杨杨 浙浙奇安信集团研发总监2017 年加入奇安信集团奇安信千星平台负责人奇安信研发一体化效能平台(DOCKYARD)负责人杨杨 浙浙研研发发效效能能与与 D De ev vO Op ps s可可视视化化流流水水线线设设计计与与实实施施可可视视化化流流水水线线效效果果与与展展望望0 01 1研研发发效效能能与与D De ev vO Op ps 业业务务研研发发痛痛点点不不断断增增加加的的需需求求和和变变化化V VS S难难以以提提升升的的研研发发效效率率自自动动化化部部署署代代码码质质量量研研发发速速度度技技术术选选型型代代码
2、码审审查查流流程程规规范范安全性快快速速响响应应效效能能监监控控创创新新团团队队协协作作技技术术债债务务错错误误率率持持续续交交付付缺缺少少性性能能抓抓手手自自动动化化测测试试重重构构人工介入多代代码码复复杂杂度度知知识识共共享享版版本本控控制制环环境境异异常常项项目目管管理理敏敏捷捷开开发发需求太奇妙持持续续集集成成测测试试效效率率低低性性能能优优化化研研发发实实践践推推广广业业务务研研发发痛痛点点在技术和工程领域,专注 DevOps 落地其实是一个好方法。根据 Atlassian 的数据统计,90%的企业通过落地 DevOps 获得了积极的业务指标。业业务务成成功功协作和需求技术和工程交付
3、和服务度量和改进D De ev vO Op ps s 的的概概念念DevOps(Development+Operations)是一种文化、一场实践,强调在自动化软件交付流程及基础设施变更过程中,软件开发人员(IT)与运维技术人员(Ops)彼此之间的协作与沟通。它旨在建立一种环境,使构建、测试、软件发布得以快速、频繁以及更加稳定地进行。产品不可见时间过长代码提交即集成部署发版才能进行测试故事开发、自测完即可提交测试安全漏洞在用户侧才被发现安全漏洞在代码提交后即被发现版本和配置管理缺少规范版本和配置管理内置在流程中环境信息和环境初始化依赖人工自动初始化和维护环境信息可可能能的的现现状状我我们们的的
4、希希望望实实施施 D De ev vO Op ps s 的的挑挑战战人人才才匮匮乏乏团团队队多多样样无无法法借借鉴鉴组组织织边边界界D De ev vO Op ps s 成成熟熟度度模模型型奇安信的模型初初始始级级 I I基基础础级级 I II I成成熟熟级级 I II II I优优秀秀级级 I IV V卓卓越越级级 V V团队文化团队各自为战组织无 DevOps 文化有统一目标交付时间、频率跨团队规划团队合作和分享程度好团队为目标共同负责目标高度统一整体规划和客户价值相关聚焦于业务和市场收益通过持续生产保证竞争力敏捷开发瀑布模型为主开始使用敏捷开发交付周期大于 1 个月建立了可持续的迭代模型
5、稳定实现双周交付迭代目标能按时完成能持续小粒度集成交付敏捷开发的范例敏捷与DevOps互相促进版本与配置管理缺少版本规划配置管理由人工完成版本、制品等有规范部分规范通过流程落地制品关联构建元信息,可回溯通过自自动动化化流程落地一切都进行版本管理基础设施即代码行业领先的版本和配置管理规范持续集成手工或部分自动化环境不稳定、工具分散定期自动构建、按需手动构建代码提交即构建标准化、自自动动化化构建随时构建、过程可视与需求、缺陷集成管理并可视不断优化,形成需求、缺陷、运维一体化平台持续测试开发完成后,手工测试对单测覆盖率进行度量有部分功能可自动化测试采用 TDD 方式,测试开发同步单测、冒烟接入流流水
6、水线线自动化测试覆盖率提升测试质量可度量、可视化测试用例和数据实时更新测试完全自动化、时间可控持续部署手工部署,频率受限过程不可控环境可自动生成通过脚本完成重复部署统一部署方案和策略支持自自动动化化部署、自主部署支持自定义部署,可紧急部署部署状态实时、可视部署可用性高,风险可控部署不会导致业务中断持续运维通过运维人员监控无灾备或应急预案有监控工具故障发生会第一时间通知和确认通过可视化监控平台监控定位可以通过数据提前察觉故障征兆可监控全生命周期数据故障发生过程可体现业务监控预警能力强故障可自动化或短时间恢复质量与安全没有SAST,依赖人工测试研发人员安全意识不强有静态扫描工具有明确的开发安全规范
7、流流水水线线集成安全扫描有全面的 SAST,有 DAST有安全和质量红线常态化安全演练,安全深入人心有完整的安全认证体系能自主要研发安全工具持续度量与改进无指标或靠人工统计少量指标缺少反馈回路通过工具进行协作管理通过有限的指标进行局部优化建立有效的反馈回路通过指标在各个阶段进行改善持续进行价值流量化促进组织级别的整体改善聚焦市场份额和交付价值的项目多角度多维度持续改善内内部部典典型型团团队队的的成成熟熟度度评评估估A 团队B 团队1 12 23 34 45 5团团队队文文化化 2 2 3 3级级:在交付时间、频率上有跨团队的规划,有项目的统一目标,但是沟通交流频率低敏敏捷捷开开发发 1 1 3
8、 3级级:瀑布、周期大于1月的迭代,稳定双周迭代都存在版版本本与与配配置置管管理理 1 1 2 2级级:有规范但落地情况不佳,配置管理缺少自动化持持续续集集成成 1 1 2 2级级:有定期的自动构建、按需手工构建、代码提交的自动构建,有版本控制,环境不稳定、工具分散持持续续测测试试 1 1 3 3级级:手工测试、部分自动化、TDD 测试驱动开发都存在,单测接入流水线,但是冒烟测试、测试数据管理做得不好持持续续部部署署 1 1 3 3级级:手工部署、脚本部署、统一部署方案均存在。但是缺少基于应用的增量部署持持续续运运维维 1 1 2 2级级:有可视化监控,但是缺少灾备、预警等方案质质量量安安全全
9、 2 2 3 3级级:手动执行安全扫描工具,有安全红线,有全面SAST,但是安全不是CI的一部分持持续续度度量量和和改改进进 1 1 3 3级级:缺少统一度量指标、报表,通过问题复盘改进典典型型团团队队的的现现状状大大量量的的业业务务团团队队,使使用用 J Je en nk ki in ns s 来来搭搭建建一一条条能能帮帮助助业业务务快快速速落落地地持持续续交交付付的的道道路路。但但随随着着越越来来越越多多业业务务开开始始做做持持续续交交付付的的建建设设,这这种种“短短平平快快”方方式式的的弊弊端端逐逐渐渐显显现现:工具建设缺少统一标准,各业务都需要去了解整个工具链的细节过程缺少透明,绝大多
10、数同学不清楚流程缺少专家,开发人员水平参差不齐,很少有业务能搭建完整的部署流水线建设成本高、无法快速响应业务变化流水线各阶段、步骤间耦合严重,无法复用流水线运行的元信息缺少记录,难以从制品追溯,难以进行度量成成熟熟的的流流水水线线低低门门槛槛高高弹弹性性可可观观测测端端到到端端自自动动化化高高可可用用D De ev vO Op ps s 三三级级成成熟熟度度与与流流水水线线相相关关的的要要求求制品与元数据绑定、构建自动化、环境标准化、部署方案自动化、支持每日构建、提交即部署、建立质量门禁、自动化代码检查、自动化测试、发布自动化、CI/CD过程可视化、流水线支持变更审批、过程指标可收集、支持度量
11、可视化看板等。流流水水线线是是 D De ev vO Op ps s 建建立立的的第第一一步步提提升升 D De ev vO Op ps s 成成熟熟度度 =提提升升研研发发效效能能可可视视化化流流水水线线是是达达成成 D De ev vO Op ps s 高高成成熟熟度度的的必必要要条条件件0 02 2可可视视化化流流水水线线设设计计与与实实施施项项目目协协作作关关键键要要素素开开发发度度量量改改进进任务管理需求管理编码代码仓库编译构建代码扫描集成测试提测集成部署测试部署数据分析JIRA issue流流水水线线需求/缺陷Git-flowCode/IDEBuilderCheckerCI部署卡口
12、集成环境部署测试环境部署代码评审&静态检查Analyzer数据改进数据反馈“业业务务研研发发一一体体化化平平台台”是是流流水水线线的的承承载载实实体体,还还需需要要想想清清楚楚如如下下四四个个要要素素流水线需要拉通的其他系统01流水线需要固化的工程实践02流水线引擎的选择03流水线的模型设计关关键键要要素素需需求求管管理理项项目目信信息息项项目目工工时时人人员员信信息息代代码码仓仓库库质质量量检检查查编编译译单单元元测测试试制制品品库库环环境境管管理理D DA AS ST T镜镜像像构构建建自自动动化化运运维维自研自研-CI自研自研自研自研部部署署集集成成测测试试自研自研其他系统关关键键要要素
13、素工工程程实实践践解解决决问问题题版本控制产品版本和制品的关系,需求和代码的关系,制品和 commit 的关系,等等分支策略版本类型、版本发布和团队协作,版本合并静态扫描开发规范,代码质量单测覆盖率编程规范,质量左移漏洞和开源组件产品安全性制品版本控制制品版本控制,制品晋级,构建元信息关联,部署回滚环境自动创建集成、测试、生产环境一致性问题自动化测试节省测试时间和成本,保证测试有效性单应用部署基于特性的快速发布高可用发布部署版本升级稳定性,保证用户低感知工程实践工工程程实实践践G Gi it tL La ab b-C CI IJ Je en nk ki in ns s自自研研高可用有官方参考架
14、构支持 1,000 50,000 人的指标和硬件需求Master 节点单点故障多个 Master 无法共享 Slave 资源Slave 离线,任务需要手动执行WorkSpace 无自动清理机制自主可控成本高API 调用有较为详细的接口文档,支持 GraphQL需要熟悉 Jenkins 的调用规则,参数需要摸索集群化通过 Runner 扩展,可伸缩,支持标签通过集群和 Slave 扩展,支持标签编译环境通过镜像进行配置通过插件进行配置插件机制无有大量社区插件,但是也存在升级和管理成本调试机制可以在本地模拟数据调试 shell触发流水线来进行调试任务调度通过 Kahn 算法对 DAG 排序并加入队
15、列-Docker集成比较方便通过插件集成,配置/语法相对麻烦关关键键要要素素外部负载均衡GitLab Web 集群Pages 集群内部负载均衡Peaefect 集群GitalyVirtual Storage 集群Virtual Storage 集群Prometheus对象储存artifactspagesdiffslfsuploadsRedisPostgesqlPraefectPostgesqlgitlab引擎选择核核心心问问题题模型设计.gitlab-ci.ymlGenerateExecuteContextExpressionParameterFlow ControlArtifactsCach
16、esPipelineStageJob GroupJobPipelineinstanceStepPipelineTemplateJobTemplate奇奇安安信信分分步步实实施施P Pi ip pe el li in ne e流流水水线线流水线S St ta ag ge e阶阶段段前置检查构建集成部署集成测试测试部署J Jo ob bs s任任务务前置检查前端构建S St te ep ps s步步骤骤生成静态扫描报告前端镜像构建集成环境部署人工卡点测试环境部署通知通知(成功)通知(失败)生成变化报告代码卫士扫描开源卫士扫描代码静态检查Sonar 扫描前端构建多架构镜像构建制品上传镜像上传生成静态
17、检查报告生成变化报告镜像部署自动化测试接口测试前端页面测试生成测试报告人工卡点镜像部署部署通知发送通知获取信息对价值流进行建模,梳理业务流程,并列出优先级0102根据业务优先级,定义所需的原子步骤03设计系统架构并完成核心能力,串联起原子步骤流程梳理分分步步实实施施前前端端流水线管理可视化编排模版管理可视化运行变量配置原子步骤 开发工具日志查看服服务务层层低代码引擎Output 管理权限管理API 接口Yaml 转换数据共享原子步骤注册执行环境隔离回调机制状态更新缓存持久化全局流水线服务管理构建服务部署服务通知服务环境管理服务报告服务系统结构运运行行层层模版语言(GitLab-CI yaml)
18、流水线引擎(GitLab-CI)R分分步步实实施施数据流向配置流水线前前端端服服务务端端模型转换奇安信流水线模型JSONgitlab-ci.ymlGitLab-CI流水线模型YamlG Gi it t 仓仓库库运行流水线G Gi it tL La ab b R Ru un nn ne er r执行流水线结果处理获取结果回调执行结果触发流水线运行流水线分分步步实实施施原子步骤分分步步实实施施前端编排分分步步实实施施Yaml 转换p pi ip pe el li in ne es st ta ag ge es sJ Jo ob b g gr ro ou up ps sj jo ob bs ss s
19、t te ep ps s定义 JSON 数组添加全局变量JSON 转 Yaml增加 Job 触发时机合并 脚本、变量、输出处理 job 先后顺序生成 Job Yaml 并写入 JSON获取前置步骤输入处理 Step 变量保证唯一性,赋值处理 Step 脚本替换变量名输出脚本结果写入 cache Job Groups loopStages loopJob loopSteps loop流水线模型转换为 GitLab-CI 可识别的 YStep 2 业务逻辑分分步步实实施施数据共享和状态更新循环获取前置 jobs 缓存目的:获取前置所有 job 上下文J Jo ob b创建当前 Job Cache
20、文件S St te ep p 1 1Step 1 业务逻辑写 Cache 文件&存 S3S St te ep p 2 2Source 当前 Job Cache 文件目的:获取当前 job 上下文写 Cache 文件&存 S3问问题题:GitLab-CI 仅提供全局 Cache,存在覆盖方方案案:每个 Job 一个单独 Cache 文件防止并发覆盖问问题题:流水线中多个并发 Job 同时更新状态,导致数据库死锁方方案案:运行过程中 Job 状态使用 Redis,避免并发更新带来的数据库事务锁分分步步实实施施微服务部署基于 kubernetes 的标准化方案,也可支持二进制包部署全生命周期管理,插
21、件化机制,提供内置阶段和插件阶段,业务可自定义任意阶段插件动作支持产品全量部署和微服务增量单独部署支持查看每个阶段的执行日志,部署状态可视,提供准确、可预期的部署结果部署初始化Pre_checkStop_serviceStart_hookPre_hookGlobal_configService_configPre_migrationrunPost_migrationFinish_hookCheck 插件Check 插件Hook 插件Hook 插件配置插件配置插件执行器插件执行器插件执行器插件执行器插件服务物料服务物料Migration 物料服务物料Migration 物料Migration 物
22、料Rollback执行器插件0 03 3可可视视化化流流水水线线效效果果与与展展望望接接入入前前接接入入后后单镜像:态势应用为一个完整前端镜像多多镜镜像像:按需一次构建多镜像,例如态势web、大禹web、态势大屏完整部署:需要完整部署 990 MB 前端镜像,在客户侧成本高增增量量部部署署:可按需部署镜像,例如仅修改和部署 120 MB 的大禹web 镜像,成本大幅降低测试大范围回归:测试无法明确测试范围,需要大范围回归按按故故事事回回归归:提供每个镜像每个微服务的文件、菜单、JIRA任务的变化,极大减小测试工作量高成本:实现和修改类似的编排能力,对用户要求高、开发成本高零零成成本本复复制制:
23、普通小白一键复制,所有业务线项目均使用分包构建接接入入前前接接入入后后有断点:构建-构建镜像-部署,步骤之间存在两处断点无无断断点点:构建-构建镜像-部署全自动化构建慢:需要构建多次镜像:x86 镜像、arm 镜像、国产化镜像、镜像合并构构建建快快:直接构建混合架构镜像无通知:构建镜像完毕,部署完毕无通知有有通通知知:支持在任意步骤节点发送通知需人工介入:需要人为执行镜像合并、部署等操作全全自自动动:无需人工介入流程耗时长:从构建开始到部署结束耗时超过 30 分钟耗耗时时短短:流水线平均运行时长 6 分钟,减少 80%时间,且成功率 100%高成本:实现和修改类似的编排能力,对用户要求高、开发
24、成本高零零成成本本复复制制:可以零成本复制到其他项目流流水水线线落落地地效效果果案案例例一一:优优化化前前端端构构建建-构构建建镜镜像像-部部署署流流程程案案例例二二:新新建建多多镜镜像像构构建建部部署署流流程程构建前端整包构建 x86 镜像构建 arm 镜像合并镜像人工部署|构建前端整包构建混合镜像自动部署生成 Diff 并通知优优化化前前:优优化化后后:回调优优化化前前:构建前端整包改动 X构建前端镜像提交测试人工部署优优化化后后:改动 X构建基础平台镜像构建业务应用镜像构建业务大屏镜像部署改动镜像提交测试流流水水线线落落地地效效果果所见即所得支持多层任务嵌套提供内置项目流水线提供内置流水
25、线模版提供内置 Job 模版支持业务注册原子步骤低代码&可视化开发环境自动创建自动构建自动部署自动化测试支持服务故事粒度部署支持变更报告、测试报告,降低测试工作量工具化、自动化承载安全门禁静态扫描门禁可信开源组件门禁快快速速编编排排原原子子步步骤骤服服务务单单独独部部署署质质量量门门禁禁已已落落地地奇奇安安信信 1 1,0 00 00 0+研研发发项项目目,串串通通原原有有分分散散的的步步骤骤每每月月成成功功帮帮助助近近 2 20 00 0 项项目目执执行行流流水水线线 2 20 0,0 00 00 0+次次,执执行行成成功功率率 9 99 9.5 5%流流水水线线与与数数字字化化度度量量组织
26、的质量文化建设和流程建设是前提一定要关联需求侧,而非仅仅是工程侧需求价值流和研发工程流的双流模型做好系统度量支持并持续改进需求侧工程侧故事交付周期迭代故事吞吐量需求停留时长研发停留时长交付质量交付效率代码提交频率代码合并频率部署频率提测频率单测覆盖率自动化测试率测试用例通过率构建频率构建成功率部署成功率Bug reopen 率代码质量代码安全漏洞缺陷密度测试用例覆盖率.需求变更率Bug reopen 率需求完成率提测打回率流流水水线线落落地地经经验验寻寻找找合合适适的的项项目目快快速速拿拿到到结结果果持持续续汇汇报报改改进进贴近核心业务业务相对敏捷项目团队有改进意愿识别核心痛点共同制定 deadline分阶段迭代实施改造用实际数字证明效果多向领导汇报争取更多的支持和资源未未来来展展望望研发效能的根本目标是“持持续续地地顺顺畅畅高高质质量量交交付付有有效效的的价价值值”,所谓有效的价值,就是市场份额的提升或者有价值的客户交付,Biz-Dev-Ops 是未来协作:尽快交付有价值业务,业务驱动,导向是产品成功度量:完善可视化指标,面向业务客观度量,全局视角识别问题,将资源投入价值需求应用:需要自洽、可编排,实现开发、部署模型一致化和标准化,实现尽早交付产品:以应用为核心,产品实现组装式应用交付T TH HA AN NK KS S