1、浙江移动的DevOps实践目录目录浙江移动的成熟浙江移动的成熟度度结果结果1搭建弹性高可用搭建弹性高可用的的构构建建环境环境2代码质量检查提代码质量检查提前前到到开开发发阶阶段段3安全高效的应用安全高效的应用部部署署4小结和思考小结和思考5研发运营一体化成熟度评估是什研发运营一体化成熟度评估是什么么一级二级三级四级五级初始级基础级全面级优秀级卓越级在组织局部范围内开始尝试DevOps活动并获得初期效果在组织较大范围内推行DevOps实践并获得局部效率提升在组织内全面推行DevOps实践并贯穿软件全生命周期获得整体效率提升 在组织内全面落地DevOps并可按需交付用户价值达到整体效率最优化在组织
2、内全面形成持续改进的文化并不断驱动DevOps在更大范围内取得成功持续交付能力成熟度评估根据配置管理、构建与持续集成、测试管理、部署与发布管理、环境管理、数据 管理、度量与反馈等七大领域,十四个维度七大领域,十四个维度进行。持续交付持续交付配置管理配置管理构建与持续集构建与持续集 成成测试管理测试管理部署与发布管理部署与发布管理环境管理环境管理数据管理数据管理度量与反馈度量与反馈版本管理构建实践测试分层管理部署与发布模式环境管理测试数据管理度量指标变更管理持续集成代码质量管理持续部署流水线数据变更管理度量驱动改进自动化测试持续交付成熟评估持续交付成熟评估需 将 的 成分 构实 一构实持续部署流
3、水线级别构建方式构建环境构建计划构建职责卓越级持续优化的构建服务平台, 持续改进服务易用性持续改进构建性能,实现 构建资源动态按需分配回 收,如搭建基于云服务虚拟化和容器化的分布式构 建集群分级构建计划,实现按 构建并达到资源和速度有效平衡构建能力赋予全部团队 员,并按需触发构建实现快速反馈优秀级实现构建服务化,可按需 提供接口和用户界面用于 可视化构建编排优化构建速度,实现增量 化构建和模块化构建,如 可采用分布式构建集群、构建缓存等技术,实现构 建资源的共享级构建计划,实现按需 建并达到资源和速度的有效平衡构建系统服务化提供更多 用户使用,构建不再局限 于专业团队进行全部级定义结构化构建脚
4、本, 现模块级共享复用和统维护建环境配置实现标准化, 有独立的构建集群明确定义构建计划和规则, 实现代码提交触发构建和 定期自动执行构建构建工具和环境由专门团 队维护,并细分团队人员 职责基础级有独立的构建服务器,多 种任务共享构建环境明确定义版本号规则,并 根据发布策略细分构建类 型,实现每日自动构建构建工具和环境由专人负 责维护,并使用权限隔离现脚本自动化,通过手 工配置完成构建使用本地设备,构建环境 不可靠没有明确的版本号规则和 构建任务计划构建工具和环境受限于团 队人员能力,频繁手动干 预维护初始级采用手工方式进行构建, 构建过程不可重复评估方式评估方式在能力子项目里,对每个级别做了明
5、确的要求定基准:确定最快、最好 效率的初步行动评估的方式:人员访谈、材料审查、模式演示指方向:跃迁需要做什么查补缺:哪些实践必是必须的评估结果评估结果能力域能力子域 能力项 能力指标项 能力得分评级持续交付配置管理版本控制版本控制系统三级效率和质 量提升点三级优势点分支管理制品管理单一可信数据源变更管理变更过程变更追溯变更回滚构建与持续 集成构建实践构建方式四级构建环境构建计划构建职责持续集成集成服务集成频率集成方式反馈周期测试管理测试分级策略分层方法四级分层策略测试时机代码质量管理质量规约检查方式反馈处理测试自动化自动化设计自动化开发自动化执行自动化分析部署与发布 管理部署与发布模式部署方式
6、三级部分过程部署策略部署质量持续部署流水线协作模式流水线过程过程可视化环境管理环境管理环境类型四级环境构建环境依赖与配置管理数据管理测试数据管理数据来源三级数据覆盖数据独立性数据变更管理变更过程兼容回滚数据监控度量与反馈度量指标度量指标定义三级度量指标类型度量数据管理度量指标更新内容和生产方式度量驱动改进数据和生产方式数据失效性覆盖范围反馈改进构建和持续集成构建和持续集成构建脚本版本管理构建环境容器化构建资源弹性高可用代码质量管理代码质量管理pre-commit检查代码环境管理环境管理容器的大规模应用持续部署流水线持续部署流水线Jar包发布数据与代码部署分离变更管理变更管理变更项多,触发来源广
7、人人流程流程技术技术构建和部署活动参与的角色 和职责 个人,全栈工程师 团队,人员合理地安排在 一起,合理地组织起来协 作 代码提交流程,Code Review 代码构建流程,持续集成流 水线 应用发布流程,部署流水线线 源码、依赖包、制品的管理 工具和方式 代码质量检查和漏洞分析的 策略和工具 构建和部署使用的工具 能力和容量构建和部署要解决的问题构建和部署要解决的问题代码构建关注软件代码到可运行程序之间的过程,通过规则、资源和工具的有效结合,提升构建 质量和构建速度,使构建成为一个轻量级,可靠可重复的过程。部署和发布模式关注交付过程中的具体实践, 将部署活动自动化并前移到研发阶段, 通过频
8、繁的演练和实践部署活动,成为研发日常工作的一部分,可靠、可重复的完成部署发布任务。打造DevOps工具链平台支撑应用构建部署目录目录浙江移动的成熟浙江移动的成熟度度结果结果1搭建弹性高可用搭建弹性高可用的的构构建建环境环境2代码质量检查提代码质量检查提前前到到开开发发阶阶段段3安全高效的应用安全高效的应用部部署署4小结和思考小结和思考5痛点:应用接入平台构建的困难痛点:应用接入平台构建的困难用户的困难脚本管理,没有构建脚本,或者 构建脚本是个黑盒职责调整,管理构建的职责集中 在BM异常处理,使用平台后构建过程 中出错谁负责平台的困难团队的差异,代码、依赖、配置 的管理工具和模式不一样工具的差异
9、,应用的差异性很大, 语言、版本、工具都不相同规模,应用接入的速度太多,构 建资源和管理模式跟不上举措一:三步提升构建脚本管理举措一:三步提升构建脚本管理应用编写构建脚本,实现构建过程脚本化管理。去除脚本对构建主机本地资源的依赖,统一配置 和依赖的管理,标准化的应用能够自动生成构建指令。构建脚本版本管理,脚本快速获取,变更过程 可以追溯。构建脚本可以快速获取版本管理构建指令的持久化构建脚本版本管理构建过程脚本化从无到有为应用编写构建脚本规范代码目录结构规范应用依赖管理构建脚本可以在 任意主机执行从繁到简统一代码仓库统一依赖仓库管理统一配置管理去除对本地目录的依赖根据语言、工具自动生成脚本管理的
10、目标:脚本可以在任意构建主机构建应用举措二:容器化构建环境举措二:容器化构建环境构建环境容器化,通过容器封装不同语言、工具导致构建环境的差异,通过容器规格划分和弹性提 升构建环境的资源利用率。屏蔽编译环境差异:不同的容器包含 不同的编译工具和环境配置。提升构建主机利用率:在同一个构 建主机上启动多个容器,提升主机 资源的利用率。构建任务配置:编译工具和资源诉 求分配对应的mesos标签举措三:搭建弹性高可用的构建环境举措三:搭建弹性高可用的构建环境Jenkins-maser高可用只有一个jenkins masterNFS共享config文件Jenkins-slave弹性扩缩jenkins ma
11、ster注册成为Framework一个slave容器只分配一个jobZZZZookeeper quorumMesosMasterStandbyMesosOn dockerOn dockerJenkins S l a v eJJoobbJobJenkins SlaveJJoobbJobMesos slave/app/dataOn dockerOn dockerJenkins S l a v eJJoobbJobJenkins SlaveJJoobbJobMesos slave/app/dataOn dockerJenkins S l a v eJJoobbOn dockerJobJenkins
12、SlaveJJoobbJobMesos slave/app/dataMarathonMasterStandbyMarathon数据共享NFS服务服务域名域名On dockerOn dockerJenkins S l a v eJJoobbJobJenkins SlaveJJoobbJobMesos slave/app/dataOn dockerJenkins SlaveJ oJ obbJobMesos slave/app/dataJenkinsMasterJenkins 申请资源启动jenkins slaveJenkins 分配任务举措四:划分构建流水线类型明确职责举措四:划分构建流水线类型明
13、确职责下载编译代码扫描单元测试制品上传镜像制作开发部署团队内部不同角色负责对应类型的流水线开发流水线准发流水线测试流水线下载编译代码扫描单元测试制品上传镜像制作测速部署自动化 测试漏洞扫描下载编译代码扫描单元测试制品上传镜像制作准发部署入网验收测试报告作用:快速集成开发联调 角色:开发时间:代码提交,触发jenkins自动构建 手工触发代码构建,进行开发联调作用:测试验证 角色:测试,开发 时间:定时构建,特定时间点发布测试环境 代码合并、手工触发,验证新功能功能:上线前验证 角色:BM,运维 时间:手工触发,迭代结束前生成上线发布版本通过代码质量管理提升代码构建的成功率,减少流水线中断目录目
14、录浙江移动的成熟浙江移动的成熟度度结果结果1搭建弹性高可用搭建弹性高可用的的构构建建环境环境2代码质量检查提代码质量检查提前前到到开开发发阶阶段段3安全高效的应用安全高效的应用部部署署4小结和思考小结和思考5痛点:代码质量检测难以推行痛点:代码质量检测难以推行代码质量管理是在软件研发过程中保证代码质量的一种机制, 当代码变更后, 可以对代码质 量进行检查、分析,给出结论和改进建议,对代码质量数据进行管理,并可以对代码质量进行追溯。质量规约检查方式反馈处理 不同厂家的开发标准不 统一 规范无法落地,成为一堆纸上文字全员Code Review 不同的人对规范的理解 不一样 全员方式占用太多的时 间
15、 提升速度太慢,新人从 头开始 技术债务没有能及时处 理 历史的技术债务太大无法偿还,大部分团队没 有勇气去解决历史账务Sonar扫描代码扫描代码能解决的问题规则落地:所有的规则和约定,通过代码规则配置到soanr。在构建的流 水线中对代码规则检查。对质量问题进行通报和跟踪。代码质量可视化:通过质量报表展示个应从复杂度分布、重复代码、单元 测试统计、技术债务等维度可视化各应用代码情况和变化趋势。不能解决的问题:流水线中断:流水线构建成功率没有提升。技术债务:应用的历史技术债务并没有随着减少。团队或项团队或项目组目组级别级别规则规则次数次数研发一组SQL binding mechanismsBL
16、OCKERshould be used12研发二组 BLOCKERNull pointers should not be dereferenced6订单中心 BLOCKERNull pointers should not be dereferenced4账号中心 BLOCKERNull pointers should not be dereferenced2到期子中心 BLOCKERNull pointers should not be dereferenced1代码质量数据采集与分析改进:引入改进:引入Gerrit工具对代码进行工具对代码进行review(1)引入Gerrit工具进行代码自动
17、review,将代码缺陷前置到开发阶段解决改进:引入改进:引入Gerrit工具对代码进行工具对代码进行review(2)19312848364651200209月7日9月3日9月4日9月5日9月6日 遗留技术债务新增技术债务当天解决数提高构建成功率提高构建成功率使用使用Gerrit前置解决代码缺陷前置解决代码缺陷提交代码git开发分 支开发人员提交代码技 术 债 务Gerrit开发人员构建Sonar 扫描不存在git开发分 支存在代码提交到仓库 前增加校验,杜 绝质量不合格代 码引入Gerrit前引入Gerrit后缺少校验,所有问题 都遗留构建流水线6584991050100构建成功率减少技术
18、债务减少技术债务代码导致的失败率实施效果实施效果目录目录浙江移动的成熟浙江移动的成熟度度结果结果1搭建弹性高可用搭建弹性高可用的的构构建建环境环境2代码质量检查提代码质量检查提前前到到开开发发阶阶段段3安全高效的应用安全高效的应用部部署署4小结和思考小结和思考5痛点:应用接入平台部署的困难痛点:应用接入平台部署的困难用户的困难交付物多:一次上线交付物众多, 版本难以对齐流程复杂:上线流程复杂,参与的 角色众多频率高:微服务改造、交付频率提 升,导致交付压力剧增平台的困难灵活:不同管控级别的项目流程 不一致高并发:集中化部署模式,大量 集群的部署统一在同一时刻复杂度:涉及的平台众多,验收 平台、
19、缓存中心、配置中心、微 服务管控平台、告警平台。代码包部署流程及存在问题代码包部署流程及存在问题问题:问题:可用性差可用性差:分发环节过多造成发布可用性差,容易发 生目录不对,文件覆盖、传包失败、分发主机僵。性能瓶颈性能瓶颈: 代码分发服务器模式可扩展性差,由于计 算节点数众多,同时进行多个代码包发布,代码分发 服务器压力大容易引发节点拉包超时、失败。无法提前预发布无法提前预发布:代码包发布模式在计算节点上只能 保留一个版本,无法进行预发布来减少发布窗口时间。 版本不一致版本不一致:发布过程中部分计算节点异常(主机 Down、Docker hang)或是计算节点维修错过发布 后重新被加入集群,
20、会导致代码包版本不一致问题。部署流程说明:1、交付平台将代码包下载到指定的服务器目录2、进程将服务器上的代码包上传到代码包分发服务器;3、进程通知所有的计算节点到代码包分发服务器拉取代码包;4、容器加载代码包并启动应用代码包交付的部署流程改进一:镜像交付改进一:镜像交付镜像交付的部署流程DevOps平台容器平台部署流程说明:1、交付平台将代码包制作成应用镜像,并推送的镜像仓库2、容器管理平台将镜像通过P2P分下载到使用镜像的主机。提升:提升:架构简单架构简单:分发环节只有镜像库这个交互点,解决原 先发布流程复杂带来可用性差的问题;消除性能瓶颈消除性能瓶颈: P2P分发模式只会访问一次镜像库,
21、分发在计算节点内部通过P2P方式完成。版本一致版本一致:Docker本身的镜像机制来保证整个过程镜像的一致性,计算节点异常(主机Down、Docker hang),不会拉起不一致版本的镜像,而是会在其他 节点重新调度;快速预热回退快速预热回退:计算节点客户端可以保留多个镜像版 本,应用回退更快捷。应用实例替换前可以通过预热 分发镜像,在发布窗口只需要重启应用就完成发布。改进二、交付物版本对齐改进二、交付物版本对齐featuredevqamaster1.1-SNAPSHOT1.2-SNAPSHOT1.3-SNAPSHOT功能版本验证版本发布版本归档commitcommitcommit1.5.RE
22、LEASE1.6.RELEASE2.0.PRODXXX.TAGmergemergemerge测试结果 安全报告任务 开发人员 代码清单入网报告迭代版本(周期 11-211.16)任务任务任务开发环境测试环境准发环境。提交 测试提交 上线建立统一的迭代版本,迭代周 期内所有的交付物都归属该版 本需求都拆解为开发任务,并依 据上线时间与迭代版本关联约定迭代周期内的版本与分支 的对应关系,每一次构建都生 成子版本非代码类交付物与对应的子版 本绑定上传脚本选 择版本故事需求线上验收功能测试自动化测试业务测试性能测试接口压测改进三:跨系统多应用部署流水线改进三:跨系统多应用部署流水线验证上线清单收集系系
23、 统统应应 用用环环 境境操操 作作版版 本本一次发布二次发布(范围外)二次发布(范围内)通过发布清单自动化生成发布计划,集中上线模式,一次发布多个应用。收集评审准备执行开始上线系统评审系系 统统应应 用用环环 境境操操 作作结结 果果上线交付物准备系系 统统应应 用用介介 质质脚脚 本本配配 置置执行计划系镜统像应部用署检应查用系统。结束上线清单收集系系 统统应应 用用环环 境境操操 作作版版 本本上线交付物准备系系 统统应应 用用介介 质质脚脚 本本配配 置置目录目录浙江移动的成熟浙江移动的成熟度度结果结果1搭建弹性高可用搭建弹性高可用的的构构建建环境环境2代码质量检查提代码质量检查提前前
24、到到开开发发阶阶段段3安全高效的应用安全高效的应用部部署署4小结和思考小结和思考5小结小结资源和工具的有效结合,提升构建质量和构建速度,使构建成为一个轻量级,可靠可重复的 过程。代码质量代码质量通过对代码质量进行检查、分析,给出结论和改进建议,提升构建的速度和成功率。构建实践构建实践部署和发布部署和发布交付物版本对齐,部署过程可灵活编排响应业务需求评估的收益评估的收益自省持续交付的核心就在于着眼全局非瓶颈的效率提高对提升有效产出 没有作用不完整的DevOps实践阻碍着 DevOps的发展参照摸着石头过河,走了无数的弯路未来在哪里,我们还要走多远的路敏捷安全容器微服务通往成熟度三级的捷径通往成熟度三级的捷径谢谢谢谢