1. 流水线的定义
流水线,即产品发布流程的名词化。根据业务定义的顺序关系,流水线的执行可以定义为依次执行相应的加工或质量校验行为。目前,软件交付全生命周期随着业务的发展不断完善。敏捷概念的提出和应用,大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于研发环节,产品发布流程陆续出现新的瓶颈。
近年来 CI/CD、DevOps 理念的出现,打破了信息孤岛和沟通壁垒,加深了多岗位人员之间的协作,也加速了软件交付的速度和质量。之家在 DevOps 上也分为多阶段,从原始的传统上线流程到如今的质效流水线阶段,逐渐团结了研发、运维和 QA 人员,更加注重流水线过程中各环节的质量检测和效率提升。未来,我们进一步将 LLM 纳入规划,开启智能流水线时代。
之家流水线发展历程与规划
2.发展历程
1.1传统上线流程
传统的发布流程较为原始和简陋,产品代码由研发人员确认完毕后,线下与测试人员沟通协调,经测试人员验证通过后即发布上线,而后由产品负责人线下联系运维对产品进行监测和维护。此阶段的任务执行与转交基本为线下进行,没有统一的平台进行管理与约束,工作开展不便,各岗位人员协作也受限,导致工作效率低、产品交付慢。且由于研发侧与运维侧的衡量指标和工作重点不同,一方追求“新功能”、一方追求“稳定”,以至于两者常有争论。随着 DevOps(Development+Operations)理念的出现,之家团结研发和运维人员,产品流程发展进入基础流水线时代。
2.2 基础流水线
DevOps 是一种思想或方法论,是一组过程、方法与系统的统称,用于促进研发、运维和质量保障部门之间的沟通、协作与整合,强调使用自动化的方法管理软件变更和软件集成。DevOps 的基础核心是 CI/CD,为了优先处理研发和运维人员之间的矛盾,之家借鉴 CI/CD 思想对产品流程进行改造。
CI(Continuous Integration)即持续集成,是自动检测和拉取代码并进行编译构建,生成多版本稳定可靠的制品供研发人员快速使用,从而保障后续软件交付的制品质量与产出效率。平台支持多类研发语言,统一管理代码及外部依赖,提供多种灵活可靠的制品生成方式,保障制品安全和质量,这属于研发人员的自动化流程。
CD(Continuous Deployment)即持续部署,指平台自动将研发人员的更改从存储库发布到生产环境,提供多样化的部署方式和规范化的部署流程保障软件交付质量和效率。主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。
基础流水线已经逐步将研发、运维工作结合在一起,有效加深了团队之间的沟通和协作。运维人员会在项目研发期间就介入到开发过程中,了解研发人员使用的系统架构和技术路线,从而制定适当的运维方案。而研发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。并且,开始使用自动化平台辅助开展工作,实现服务自动化部署上线功能,支持更快速可靠地发布产品。随着平台的发展,服务质量被越来越重视,在高效的同时,保障质量成为重要一环,之家进一步把 QA 人员团结进来,进入当前的质效流水线时代。
3.3 质效流水线
CT(Continuous Test)即持续测试,紧密结合持续集成(CI)的流程,通过自动化测试快速、准确地执行测试用例,及时发现代码质量问题,提升测试效率和软件质量,使得 QA 人员能够将精力集中于优化自动化测试用例和场景。
在此基础上,流水线不再明显区分测试流水线与研发流水线,而是将各种类型的测试融入主线流水线的各个环节。这样一来,研发人员无需等待 QA 的反馈,可以及时从自动化测试中获取问题信息并进行调整。为了迅速丰富和完善自动化测试类别,平台利用公司内部众多测试平台的资源,整合了其测试功能。迄今为止,已接入的测试类别包括单元测试、静态代码扫描、接口测试、PC/M前端拨测、APP H5性能测试、压力测试以及覆盖率测试等。
基于这些丰富的测试类别,平台将各项测试嵌入流水线的不同环节,自动地并实时地检测每个环节的质量情况。例如,在代码提交阶段进行单元测试和代码扫描,在测试部署阶段进行接口测试、性能测试和覆盖率测试等。通过即时反馈测试结果,并根据质量检查标准设定门禁,我们可以有效地控制流水线的进程,严格把控服务质量。
图片
我们进一步在 CI/CD 的背景下对基础流水线进行了改造。在 CI 阶段,平台支持多类研发语言,统一管理代码及外部依赖,提供多种灵活可靠的制品生成方式,保障制品安全和质量。代码与版本控制作为质效流水线的第一步,需求进入开发阶段,应用代码版本统一使用 Git 系统进行管理,平台通过应用实现语言等属性来划分后续上线申请的检测机制。为了提高开发及后续 CI 阶段编译效率(使用代理及本地存储方式)和安全性(管控外部访问地址),平台统一使用 nexus 私服进行管理程序依赖的第三方包、业务基础包,支持 java、nodejs、go、.net 等各种语言。主要的编辑构建任务基于jenkins集群实现,支持虚机、容器两种构建环境,两者互为补充,彼此独立工作;支持通用性、个性化两种任务类别,适配特殊依赖环境构建;支持镜像、压缩包两种制品产出物,应对容器、虚机部署方式。编译构建中镜像制品比例达到89.7%,平台对其支持力度也是最大的,提供平台、业务、私有三类基础镜像,支持 dockerfile 的自定义编排及预览,实现快速、灵活的镜像配置,提高用户的接入效率。编辑构建制品产物,镜像推送至Harbor镜像仓库,压缩包推送至 OSS ,利用底层的多副本特性保障制品的安全。
图片
在 CD 阶段,为了统一各类环境配置并提高操作效率,平台采用模板化配置和默认值等手段减少用户配置操作。此外,还提供了环境复制功能以快速生成相同环境,并实现了一键式接入鹰眼日志和云日志,避免用户在不同平台间来回切换。
目前平台已拥有19000+个有效环境。通过执行多种合规性门禁检测以及重要应用部署流程审批,严格把控应用上线质量。今年以来,已完成26000+次上线审批。平台支持主机和容器两类资源类型,并分别提供了多种部署方式以降低上线风险。
主机部署依赖于 OpenStack 和 salt 等技术,支持10种部署方式,如 Tomcat 多实例/多应用、可执行文件、springboot、.net website、win service 和 yum 等。容器部署,其底层基于 kubernetes 和 container 等云原生技术。平台支持全量、灰度和蓝绿三种部署方式,同时支持特殊容器环境服务网格(Service Mesh)应用部署。
图片
CD 环节,作为部署环节的延伸,针对前端服务,平台提供 CDN 刷新环节,推动新版本的更新速度。平台应用部署时默认接入主机、容器等基础监控,支持一键式接入云平台日志、鹰眼日志,提高服务保障接入效率;应用管理提供服务监控、日志快捷连接,方便用户了解服务状态细节;提供系统应用统一看板,以全局角度展示服务业务、技术指标,支持监控上升事件,提高用户定位问题效率。(各个监控平台作用)
图片
在质效流水线阶段,平台提供接口服务流水线、前端服务流水线、机器学习流水线、自定义等多种类型标准流水线编排模板,提高用户编排质量和效率;针对前端相同业务类应用流水线的相似性,以预设模板的形式实现了应用的一键化创建,系统自动生成部署环境、流水线等整个过程,效率较手动创建提高 3 倍以上。
质效流水线整体过程展示
3.未来规划
随着平台的不断完善,我们计划进一步对质效流水线进行改造,考虑结合 LLM(Large Language Model)大语言模型,升级进入智能流水线时代。我们考虑从以下方面拓展:
智能编排:目前流水线整体流程编排由人工完成,链路固化,缺乏灵活性,后期考虑引入人工智能,根据流水线任务实际运行状态及整体资源使用情况,动态调整编排,充分利用资源,提高整体效率。
智能测试:借助大模型赋能单元测试、接口测试用例、UI自动化测试用例自动生成,通过智能装配流水线质量测试任务,提升测试覆盖率与效率。
智能部署:根据业务情况和应用服务常用部署方式进行有效推荐,部署失败时智能化修复,保障软件发布稳定高效运行。
4. 总结
平台流水线从传统发布到现在经历两个大的阶段,基础流水线实现持续集成、持续部署,将研发、运营工作有效地结合在一起;考虑到服务质量的重要性,质效流水线进一步团结 QA 人员,将自动测试融入各个环节;未来平台应用会不断增长,各种细节处理会不断增多,这会给研发、运维、QA 人员带来很大压力,幸运的是我们处于AI高速发展的时代,大语言模型可以辅助我们快速实现功能开发、服务测试、编排部署等各种任务,这是一件美妙的事情,也是我们共同期待的智能时代。
作者简介
钱磊
■ 云平台部-平台运营组
■ 2021年加入汽车之家,目前主要负责之家云A-One平台相关研发工作,旨在提供稳定、高效、保质的自动化流水线服务。
陆艳
■ 云平台部-平台运营组
■ 2016年加入汽车之家,目前主要负责之家云平台CI/CD、日志、监控、测试工具等相关产品工作。