作者:胡俊义,背景现状软件开发已经从传统的瀑布方式转变为敏捷开发,软件交付过程中的开发和测试形成快速迭代交付,但在软件交付方面,客户需要在使用前或使用中进一步优化交付效率,包括集成、部署、运维。因此,DevOps的出现将敏捷相关的概念延伸到了运维端,从而将产品、设计、开发、测试、运维等团队更加紧密地结合在一起。从向客户交付产品的角度来看,前端研发通常是整个产品设计开发链条中的最后一个节点,这意味着前端团队受上游变化的影响最大,从效率出发的经营理念,提高前端交付效率是头等大事。那么如何提高交付效率主要面临以下几个问题:交付效率:1.敏感需求的增加,即迭代工作的增加:软件开发已经从传统的瀑布流方式转变为敏捷开发,现在已经有了对敏捷开发提出了更高的要求。要求。近年来,项目的迭代需求不断增加,这就要求前端开发人员具备从开发到测试快速上线的能力,也要求团队完成从稳定状态到敏捷状态的转变。状态。2、前端研发效率瓶颈,实现双周交付的挑战:敏捷迭代过程中,研发周期缩短,并行需求增加。研发团队难以保证代码从开发到测试上线的各个方向的高质量输出。3、研发过程中不必要的浪费降低了交付效率:重复劳动、过度沟通、链接等待、通知不及时等。他们对项目如何在生产环境中稳定运行以及需要考虑哪些安全和可持续性因素没有很好的了解。2、研发流程标准不同导致协同开发容易出错:开发者编码风格不同,测试和上线流程不一致,关键流程环节遗漏,风险行为难以约束,导致上线事故率上升.3、不同类型应用服务的部署方式不一致:涉及部分应用系统的调整、部署、扩容,需要重新熟悉应用部署和构建环境的使用,使团队无从下手发布的信心。新服务或应用的构建难以快速上线,停留在生产环境的部署阶段。二、问题分析下图是我们团队之前的开发流程。黄色是关键工序,绿色是必经环节。我们对每个流程环节一一分析:行云审核审核沟通过多,需求规范不统一,进度无法固定,需求确认缺乏与上级沟通,私自接受确认需求相关部门缺乏行为约束,主开发容易造成代码污染,无法约束开发人员按需求进行分支开发缺乏代码开发标准,开发架构不同,编码风格不一致,打包部署命令不一致,多人协作困难协作Codereview缺少流程卡点,开发者经常跳过codereview环节,代码问题难以暴露,上线风险增加。代码检测缺少流程卡点,检测流程容易被忽视。在多个平台之间切换以进行代码检测会导致提交测试的时间浪费。缺乏沟通,通知测试人员不及时,测试内容不完整。忘记改卡到测试阶段提交代码缺乏质量卡点,缺乏行为约束,手动操作代码提交,容易造成不确定性问题,增加发布风险浪费等待时间通过深入分析这些问题和各个团队的反馈,发现最大的瓶颈在于研发协作之间的沟通障碍、过程环节的疏漏和质量控制不到位,这些是大多数问题的解决方案。前提。经过研究,我们发现DevOps正是为这些问题而生,而打造高效的交付流程成为我们突破的关键。3.DevOps流水线简介1)DevOps流水线简介:DevOps流水线专注于统一项目需求、开发、测试、部署和运维,基于整个组织的协作和优化,实现敏捷开发、持续交付和应用运维。应用架构的无缝集成。2)DevOps流水线与前端开发定位:在前端业务中集成多个复杂的构建流程,使其成为一个能够覆盖多种前端业务场景的流水线,为前端开发者提供服务。使命:减少前端开发人员在复杂构建过程中消耗的时间和精力,提高前端开发人员整体的工作效率。4、DevOps流水线设计1)架构设计行云流水线采用平台管理+原子设计+自定义开发模式。平台提供基础服务,通过原子形式和自定义开发模式可以无限扩展其能力,即兼顾平台的稳定性,大大降低现有工具平台的接入成本。现有的工具平台可以独立为用户提供服务,也可以标准化输出插件化的原子能力。作为持续交付平台的一部分,可以融入软件交付流程,实现互利共赢,完美对接,减少重复建设,共建平台。行云流水线提供了良好的环境基础和丰富的原子准备,使得我们构建自动化流水线更加方便快捷,大大提高了我们的开发时间。我们团队的前端DevOps流水线是基于行云流水线构建的。2)流程设计下图是我们为团队设计的前端DevOps自动化流水线。目的是打破开发、测试、产品、运营等不同岗位人员之间的沟通障碍,让研发团队成员同时具备不同研发环节的能力,从而实现项目的无缝衔接整合整个研发流程。我们来看看赋予前端DevOps流水线的能力:1.全局视角的项目流程管理:我们将整个项目开发周期拆解为:需求阶段、开发阶段、测试阶段、预上线和发布上线。每个阶段自动运行在一系列流程节点中,以云卡为媒介展示当前流程阶段。2.精细化代码质量和风控:通过实现代码与需求的关联,我们设计了更细粒度的质量检查点和风控策略。约束关键节点的研发运作,设置流程卡点,制定不同的质量检测机制,使前期质量预防、中期风险发现、后期问题回顾等环节的成本投入大大降低。3、自动化流程触发和行云卡转:通过约定的代码提交,自动触发测试流程和上线流程,解放了研发在流程转接中的额外操作和耗时注意力。同时,星云卡会随着项目阶段的变化自动转移,用于更准确统计不同阶段的投入成本。而且,高度自动化的流程也为项目带来了更高的质量和稳定性。4、即时消息联系和流程提醒:当到达关键流程节点时,会通过东东和邮件实时同步给相关人员,进一步降低项目开发过程中的沟通成本,消息信息也可以作为备忘录代理和存档记录,时刻关注流程中的关键节点。五、实践流程总体实践流程分为:1、需求阶段:制定工作流->需求创建->审查约束->关联代码分支。2.开发阶段:vscode的可视化构建(模板、调试、测试、预发布)。3、测试阶段:代码对比->编译打包->图片压缩->发布测试->性能测试->东东邮件通知。4、上线阶段:代码审查->代码合并->代码对比->编译打包->走查测试->图片压缩->JDOS部署->性能测试->东东邮件通知->回归测试->发布上线->星云验收。1)行云团队在需求阶段的空间设置中,我们将工作流设置为一系列的阶段,不能跳过阶段和回溯。投入成本。为防止员工私自承担确认要求,我们规范了审核流程,设置了审核约束条件。来自业务和产品的需求必须由项目经理通过。只有在需求评审阶段审核通过后,才能进入后续的开发阶段,并记录详细的评审信息。为了实现精细化的代码质量和风险控制,我们规定需求必须与代码分支关联。因此,在工作流开发阶段的预验证中,设置了“检测关联代码分支”的流程。当工作流转入开发阶段时,会弹窗提示未关联的代码分支关联代码分支,否则无法进入开发阶段。关联代码分支后,项目正式进入开发阶段。2)在开发阶段,我们为VSCode代码编辑器开发了一套插件,集模板、调试、测试、预发布等功能于一体。让前端开发者更加关注代码实现,简化项目初始化和项目流程。我们可以通过该插件直接触发测试流水线和预发布流水线,也可以通过常规提交流水线的Coding代码来触发相应流程。如上图,提交关键字“publishingandtesting”,触发测试流水线,进入测试阶段。3)测试阶段触发测试流水线后,会自动执行流水线中的功能(代码差异比较、编译打包、图片压缩、上传测试页面、性能测试等)。执行成功后,相关人员会收到提醒和邮件通知。东东提醒:邮件通知:4)上线阶段当测试通过需要上线时,我们制定了上线前流程,意在做上线前最后的回归测试和质量风控。4.1触发预发布管道与测试过程相同。我们可以在VSCode中点击预发布按钮来触发预发布流水线,或者通过Coding提交关键字“发布预发布”。4.2分支代码合并pre-launchpipeline被触发后,会自动执行分支代码与主干合并的操作。因为后续的启动是主干启动,所以分支和合并主干的操作是关键必要的。注意:如果审核不通过,分支合并会失败,东东邮件会提示你进行代码审核。4.3代码审查为了进一步提高代码质量,降低潜在风险,我们在Coding平台制定了审查策略。只有codereview通过了,才能进行合并trunk的操作,如下图配置。分支代码未审核时,审核人员将收到代码审核通知和邮件通知,提高代码质量控制,进一步降低沟通成本。审稿人收到的通知:审稿人收到的邮件通知:Codereview信息:4.4审稿采用Coding系统的自动合并trunk策略,通过trunk的自动合并,避免了人工合并带来的不确定风险错误,如下所示。4.5自动触发pre-launchdeploymentpipeline为了避免review过程中等待时间的浪费,当review通过branchmerge成功后,pre-launchdeploymentpipeline自动触发。这种自动触发机制来源于流水线的触发设置,如下图所示。4.6自动执行pre-launch部署流程pre-launch部署流程分为两个阶段串联:Stage1:Stage2:在stage1编译打包后,我们设置代码自检(CheckList)流程卡住点,目的是提醒前端开发者最后检查一些风险项,确认提交,如下图。全部检查确认后,会自动执行第二阶段的预发布部署流程,并推送通知。4.7JDOS部署及性能安全检测预发布部署流水线开放了JDOS构建部署功能,并新增Scan性能检测和竹龙安全扫描,对预发布页面进行全方位的质量风控。4.8回归测试及发布上线前部署流程完成后,项目相关人员将收到邮件通知。现在,项目人员可以打开预发布机提供的链接进行全回归测试。测试无误后,进入JDOS平台,点击“在线申请”发布上线。4.9完成上线启动及验收至此,整个项目研发流程结束,星云卡启动验收。
