首页 > 其他分享 >汽车之家质效流水线——奔向未来软件交付的关键里程碑

汽车之家质效流水线——奔向未来软件交付的关键里程碑

时间:2023-11-20 20:32:33浏览次数:31  
标签:部署 流程 平台 研发 质效 测试 流水线 里程碑

1. 流水线的定义

流水线,即产品发布流程的名词化。根据业务定义的顺序关系,流水线的执行可以定义为依次执行相应的加工或质量校验行为。目前,软件交付全生命周期随着业务的发展不断完善。敏捷概念的提出和应用,大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于研发环节,产品发布流程陆续出现新的瓶颈。 近年来 CI/CD、DevOps 理念的出现,打破了信息孤岛和沟通壁垒,加深了多岗位人员之间的协作,也加速了软件交付的速度和质量。汽车之家在 DevOps 上也分为多阶段,从原始的传统上线流程到如今的质效流水线阶段,逐渐团结了研发、运维和 QA 人员,更加注重流水线过程中各环节的质量检测和效率提升。未来,我们进一步将 LLM 纳入规划,开启智能流水线时代。 在这里插入图片描述 ::: hljs-center 之家流水线发展历程与规划 :::

2. 发展历程

2.1 传统上线流程

传统的发布流程较为原始和简陋,产品代码由研发人员确认完毕后,线下与测试人员沟通协调,经测试人员验证通过后即发布上线,而后由产品负责人线下联系运维对产品进行监测和维护。此阶段的任务执行与转交基本为线下进行,没有统一的平台进行管理与约束,工作开展不便,各岗位人员协作也受限,导致工作效率低、产品交付慢。且由于研发侧与运维侧的衡量指标和工作重点不同,一方追求“新功能”、一方追求“稳定”,以至于两者常有争论。随着 DevOps(Development+Operations)理念的出现,之家团结研发和运维人员,产品流程发展进入基础流水线时代。

2.2 基础流水线

DevOps 是一种思想或方法论,是一组过程、方法与系统的统称,用于促进研发、运维和质量保障部门之间的沟通、协作与整合,强调使用自动化的方法管理软件变更和软件集成。DevOps 的基础核心是 CI/CD,为了优先处理研发和运维人员之间的矛盾,之家借鉴 CI/CD 思想对产品流程进行改造。 CI(Continuous Integration)即持续集成,是自动检测和拉取代码并进行编译构建,生成多版本稳定可靠的制品供研发人员快速使用,从而保障后续软件交付的制品质量与产出效率。平台支持多类研发语言,统一管理代码及外部依赖,提供多种灵活可靠的制品生成方式,保障制品安全和质量,这属于研发人员的自动化流程。 CD(Continuous Deployment)即持续部署,指平台自动将研发人员的更改从存储库发布到生产环境,提供多样化的部署方式和规范化的部署流程保障软件交付质量和效率。主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。 基础流水线已经逐步将研发、运维工作结合在一起,有效加深了团队之间的沟通和协作。运维人员会在项目研发期间就介入到开发过程中,了解研发人员使用的系统架构和技术路线,从而制定适当的运维方案。而研发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。并且,开始使用自动化平台辅助开展工作,实现服务自动化部署上线功能,支持更快速可靠地发布产品。随着平台的发展,服务质量被越来越重视,在高效的同时,保障质量成为重要一环,之家进一步把 QA 人员团结进来,进入当前的质效流水线时代。

2.3 质效流水线

CT(Continuous Test)即持续测试,紧密结合持续集成(CI)的流程,通过自动化测试快速、准确地执行测试用例,及时发现代码质量问题,提升测试效率和软件质量,使得 QA 人员能够将精力集中于优化自动化测试用例和场景。 在此基础上,流水线不再明显区分测试流水线与研发流水线,而是将各种类型的测试融入主线流水线的各个环节。这样一来,研发人员无需等待 QA 的反馈,可以及时从自动化测试中获取问题信息并进行调整。为了迅速丰富和完善自动化测试类别,平台利用公司内部众多测试平台的资源,整合了其测试功能。迄今为止,已接入的测试类别包括单元测试、静态代码扫描、接口测试、PC/M前端拨测、APP H5性能测试、压力测试以及覆盖率测试等。 基于这些丰富的测试类别,平台将各项测试嵌入流水线的不同环节,自动地并实时地检测每个环节的质量情况。例如,在代码提交阶段进行单元测试和代码扫描,在测试部署阶段进行接口测试、性能测试和覆盖率测试等。通过即时反馈测试结果,并根据质量检查标准设定门禁,我们可以有效地控制流水线的进程,严格把控服务质量。 ::: hljs-center 在这里插入图片描述 ::: 我们进一步在 CI/CD 的背景下对基础流水线进行了改造。在 CI 阶段,平台支持多类研发语言,统一管理代码及外部依赖,提供多种灵活可靠的制品生成方式,保障制品安全和质量。代码与版本控制作为质效流水线的第一步,需求进入开发阶段,应用代码版本统一使用 Git 系统进行管理,平台通过应用实现语言等属性来划分后续上线申请的检测机制。为了提高开发及后续 CI 阶段编译效率(使用代理及本地存储方式)和安全性(管控外部访问地址),平台统一使用 nexus 私服进行管理程序依赖的第三方包、业务基础包,支持 java、nodejs、go、.net 等各种语言。主要的编辑构建任务基于jenkins集群实现,支持虚机、容器两种构建环境,两者互为补充,彼此独立工作;支持通用性、个性化两种任务类别,适配特殊依赖环境构建;支持镜像、压缩包两种制品产出物,应对容器、虚机部署方式。编译构建中镜像制品比例达到89.7%,平台对其支持力度也是最大的,提供平台、业务、私有三类基础镜像,支持 dockerfile 的自定义编排及预览,实现快速、灵活的镜像配置,提高用户的接入效率。编辑构建制品产物,镜像推送至Harbor镜像仓库,压缩包推送至 OSS ,利用底层的多副本特性保障制品的安全。 ::: hljs-center 在这里插入图片描述 ::: 在 CD 阶段,为了统一各类环境配置并提高操作效率,平台采用模板化配置和默认值等手段减少用户配置操作。此外,还提供了环境复制功能以快速生成相同环境,并实现了一键式接入鹰眼日志和云日志,避免用户在不同平台间来回切换。 目前平台已拥有19000+个有效环境。通过执行多种合规性门禁检测以及重要应用部署流程审批,严格把控应用上线质量。今年以来,已完成26000+次上线审批。平台支持主机和容器两类资源类型,并分别提供了多种部署方式以降低上线风险。 主机部署依赖于 OpenStack 和 salt 等技术,支持10种部署方式,如 Tomcat 多实例/多应用、可执行文件、springboot、.net website、win service 和 yum 等。容器部署,其底层基于 kubernetes 和 container 等云原生技术。平台支持全量、灰度和蓝绿三种部署方式,同时支持特殊容器环境服务网格(Service Mesh)应用部署。 ::: hljs-center 在这里插入图片描述 ::: CD 环节,作为部署环节的延伸,针对前端服务,平台提供 CDN 刷新环节,推动新版本的更新速度。平台应用部署时默认接入主机、容器等基础监控,支持一键式接入云平台日志、鹰眼日志,提高服务保障接入效率;应用管理提供服务监控、日志快捷连接,方便用户了解服务状态细节;提供系统应用统一看板,以全局角度展示服务业务、技术指标,支持监控上升事件,提高用户定位问题效率。(各个监控平台作用) ::: hljs-center
在这里插入图片描述 ::: 在质效流水线阶段,平台提供接口服务流水线、前端服务流水线、机器学习流水线、自定义等多种类型标准流水线编排模板,提高用户编排质量和效率;针对前端相同业务类应用流水线的相似性,以预设模板的形式实现了应用的一键化创建,系统自动生成部署环境、流水线等整个过程,效率较手动创建提高 3 倍以上。 ::: hljs-center 在这里插入图片描述 ::: ::: hljs-center 质效流水线整体过程展示 :::

3.未来规划

随着平台的不断完善,我们计划进一步对质效流水线进行改造,考虑结合 LLM(Large Language Model)大语言模型,升级进入智能流水线时代。我们考虑从以下方面拓展: 智能编排:目前流水线整体流程编排由人工完成,链路固化,缺乏灵活性,后期考虑引入人工智能,根据流水线任务实际运行状态及整体资源使用情况,动态调整编排,充分利用资源,提高整体效率。 智能测试:借助大模型赋能单元测试、接口测试用例、UI自动化测试用例自动生成,通过智能装配流水线质量测试任务,提升测试覆盖率与效率。 智能部署:根据业务情况和应用服务常用部署方式进行有效推荐,部署失败时智能化修复,保障软件发布稳定高效运行。

4. 总结

平台流水线从传统发布到现在经历两个大的阶段,基础流水线实现持续集成、持续部署,将研发、运营工作有效地结合在一起;考虑到服务质量的重要性,质效流水线进一步团结 QA 人员,将自动测试融入各个环节;未来平台应用会不断增长,各种细节处理会不断增多,这会给研发、运维、QA 人员带来很大压力,幸运的是我们处于AI高速发展的时代,大语言模型可以辅助我们快速实现功能开发、服务测试、编排部署等各种任务,这是一件美妙的事情,也是我们共同期待的智能时代。

标签:部署,流程,平台,研发,质效,测试,流水线,里程碑
From: https://blog.51cto.com/autohometech/8491375

相关文章

  • 【动态规划】流水线调度问题(加工顺序问题)
    问题描述:有若干任务,{1,2...n}。每个任务都需要先在机器1,然后在机器2上执行。每个任务在不同机器执行时有相应时间。求解任务的执行顺序,使得在最短的时间内分别在两台机器上执行完所有任务。例:下图为任务i,j在机器a,b的执行时间。           根据J......
  • 计算机组成原理之处理器(流水线)
    引言为什么不采用单周期实现,硬件比较简单?主要是因为效率太低,处理器中最长的路径(一般是ld指令)决定了时钟周期流水线概述流水线是一种能使多条指令重叠执行的技术。流水线更快的原因是所有的工作都在并行执行,所以单位时间能够完成更多的工作,流水线提高了吞吐率。RISC-V是......
  • 甘特图组件DHTMLX Gantt用例 - 如何拆分任务和里程碑项目路线图
    创建一致且引人注意的视觉样式是任何项目管理应用程序的重要要求,这就是为什么我们会在这个系列中继续探索DHTMLXGantt图库的自定义。在本文中我们将考虑一个新的甘特图定制场景,DHTMLXGantt组件如何创建一个项目路线图。用例-带有自定义时间尺度、拆分任务和文本标签的项目路线......
  • 【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱
    在云原生领域,无论使用哪种编排调度平台,Kubernetes,DockerSwarm,OpenShift等,业务都需要基于镜像进行交付,我们在内部实践“Source-to-image”和链式构建,总而总结出“OneBuild”模式。其核心思想是:一处构建,多处使用。问题一般,我们会使用类似JenkinsCI系统来构建镜像,以满足持续集成,......
  • 1api触发gitlab流水线
    是的,通过GitLabAPI,您可以修改文件内容,并在更改后自动触发CI/CD流水线。以下是步骤和示例:1.**修改文件内容**:   使用`RepositoryFilesAPI`更新文件内容。这将为您提供一个提交新文件内容的方式。 示例请求: ```http PUT/projects/:id/repository/fil......
  • 【Pipeline】Jenkins流水线中如何使用全局变量
    例如我们在stage1中利用script代码块设置赋值了一个变量,然后想在stage2中使用。应该怎么操作呢?https://stackoverflow.com/questions/53541489/updating-environment-global-variable-in-jenkins-pipeline-from-the-stage-level/53541813https://www.youtube.com/watch?v......
  • 【Pipeline】Jenkins流水线parallel并行构建
    位于parallel块下的阶段都将并行执行,而且并行阶段还可以被分到不同的Jenkinsagent上执行。在默认情况下,Jenkinspipeline要等待parallel块下所有的阶段都执行完成,才能确定结果。如果希望所有并行阶段中的某个阶段失败后,就让其他正在执行的阶段都中止,那么只需要在与parallel块同......
  • 创建CI/CD流水线中的IaC前,需要考虑哪些事项?
    许多软件工程团队通常会遵循相似的方法来交付基础设施以支持软件开发生命周期。为了缩小基础设施配置方式与应用程序环境部署方式之间的差距,许多DevOps团队将其基础设施即代码(IaC)模块直接连接到其CI/CD平台。其目的是创建一个直接融入软件开发和交付流程的连续基础设施流水线,......
  • 在CI/CD发布流水线中,使用dotnet publish命令编译.NET Core C#代码
    在搭建CI/CD发布流水线(例如Jenkins流水线)发布.NETCore项目时,我们需要在流水线中使用dotnetpublish命令来编译C#代码来生成DLL文件。参考dotnetpublish官方文档。其中这里有说到,dotnetpublish命令会隐式调用dotnetrestore命令来还原nuget包,所以调用dotnetpublish之前不用显......
  • jenkins创建微服务流水线(微服务多级构建)
    1.Jenkins中新建一个maven的流水线  填写构建配置保存历史构建7天  填写git地址及凭证 填写build(cleanpackage-Dmaven.test.skip=true) 填写脚本 监本样例 ......