CN114564207A - 软件产品的处理方法、装置、计算机设备、存储介质 - Google Patents
软件产品的处理方法、装置、计算机设备、存储介质 Download PDFInfo
- Publication number
- CN114564207A CN114564207A CN202210361956.9A CN202210361956A CN114564207A CN 114564207 A CN114564207 A CN 114564207A CN 202210361956 A CN202210361956 A CN 202210361956A CN 114564207 A CN114564207 A CN 114564207A
- Authority
- CN
- China
- Prior art keywords
- product
- compiling
- component
- compiled
- assembly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及一种软件产品的处理方法、装置、计算机设备、存储介质和计算机程序产品,可以应用于地图领域的软件产品、自动驾驶领域的软件产品。所述方法包括:获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;获取所述第二产品组件对应的历史编译产出物;将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。采用本方法能够有效提高软件产品处理效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种软件产品的处理方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机技术以及互联网技术的发展,软件产品在不同业务场景的应用落地,使得各种类型的软件产品广受大众关注。软件产品的产生一般会经历需求阶段、研发阶段以及发布阶段。需求阶段主要涉及产品需求确定、需求可行性分析、UI设计等;研发阶段主要涉及软件产品开发及测试;发布阶段主要涉及对测试通过的代码进行编译发版以及后期进行升级及运营维护。由于软件产品需要按照一定周期进行更新维护,因此,需要对软件产品进行及时有效的编译,以保障软件产品的编译效率和发布质量。
然而,目前的软件产品处理方式中,针对一些大型的软件产品,通常有不同的版本,每隔一定的时间周期就需要对这些软件产品进行升级维护,因此可能需要针对这些软件产品的上百套代码进行编译,容易导致大型软件产品的编译时间过长、修复某组件缺陷再次发版质量不可控等问题,使得软件产品的处理效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效提高软件产品处理效率的软件产品的处理方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种软件产品的处理方法。所述方法包括:获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;获取所述第二产品组件对应的历史编译产出物;将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
第二方面,本申请还提供了一种软件产品的处理装置。所述装置包括:获取模块,用于获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;划分模块,用于根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;编译模块,用于对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;所述获取模块还用于获取所述第二产品组件对应的历史编译产出物;组装模块,用于将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;获取所述第二产品组件对应的历史编译产出物;将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;获取所述第二产品组件对应的历史编译产出物;将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;获取所述第二产品组件对应的历史编译产出物;将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
上述软件产品的处理方法、装置、计算机设备、存储介质和计算机程序产品,通过获取待编译产品组件对应的编译参数,待编译产品组件是拆分目标软件产品所得的组件;根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件,并对第一产品组件进行编译,得到第一产品组件对应的编译产出物;获取第二产品组件对应的历史编译产出物,将编译产出物和历史编译产出物进行组装,得到软件产品安装包。由于待编译产品组件是拆分目标软件产品所得的组件,故可以根据获取到的待编译产品组件对应的编译参数,对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件,从而可以对拆分后的第一产品组件进行并发编译,并直接复用第二产品组件对应的历史编译产出物,实现了快速高效的将编译产出物和历史编译产出物进行组装,得到软件产品安装包,有效提高了软件产品处理效率。
附图说明
图1为一个实施例中软件产品的处理方法的应用环境图;
图2为一个实施例中软件产品的处理方法的流程示意图;
图3为一个实施例中根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件步骤的流程示意图;
图4为一个实施例中Display组件对应的编译流水线的示意图;
图5为一个实施例中SimCore组件对应的编译流水线的示意图;
图6为一个实施例中流水线配置页面的界面示意图;
图7为一个实施例中大型仿真产品快速编译发布的处理流程图;
图8为一个实施例中分布式编译处理的流程示意图;
图9为一个实施例中分布式编译具体的实例流程图;
图10为一个实施例中软件产品的处理装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的软件产品的处理方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他服务器上。终端102可以从服务器104获取待编译产品组件对应的编译参数,待编译产品组件是拆分目标软件产品所得的组件;终端102根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;终端102对第一产品组件进行编译,得到第一产品组件对应的编译产出物;终端102获取第二产品组件对应的历史编译产出物,并将编译产出物和历史编译产出物进行组装,得到软件产品安装包。
其中,终端102可以但不限于是各种台式计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。
服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现,可以理解,本申请实施例提供的服务器104也可以是区块链系统中的服务节点,该区块链系统中的各服务节点之间形成组成点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。
智能交通系统(Intelligent Traffic System,ITS)又称智能运输系统(Intelligent Transportation System),是将先进的科学技术(信息技术、计算机技术、数据通信技术、传感器技术、电子控制技术、自动控制理论、运筹学、人工智能等)有效地综合运用于交通运输、服务控制和车辆制造,加强车辆、道路、使用者三者之间的联系,从而形成一种保障安全、提高效率、改善环境、节约能源的综合运输系统。或者;
智能车路协同系统(Intelligent Vehicle Infrastructure CooperativeSystems,IVICS),简称车路协同系统,是智能交通系统(ITS)的一个发展方向。车路协同系统是采用先进的无线通信和新一代互联网等技术,全方位实施车车、车路动态实时信息交互,并在全时空动态交通信息采集与融合的基础上开展车辆主动安全控制和道路协同管理,充分实现人车路的有效协同,保证交通安全,提高通行效率,从而形成的安全、高效和环保的道路交通系统。
计算机视觉技术(Computer Vision,CV)计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和电脑代替人眼对目标进行识别、记录和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取信息的人工智能系统。计算机视觉技术通常包括图像处理、图像识别、图像语义理解、图像检索、OCR、视频处理、视频语义理解、视频内容/行为识别、三维物体重建、3D技术、虚拟现实、增强现实、同步定位与地图构建、自动驾驶、智慧交通等技术,还包括常见的人脸识别、指纹识别等生物特征识别技术。
随着人工智能技术研究和进步,人工智能技术在多个领域展开研究和应用,例如常见的智能家居、智能穿戴设备、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、无人机、机器人、智能医疗、智能客服、车联网、自动驾驶、智慧交通等,相信随着技术的发展,人工智能技术将在更多的领域得到应用,并发挥越来越重要的价值。
在一个实施例中,如图2所示,提供了一种软件产品的处理方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
步骤202,获取待编译产品组件对应的编译参数;待编译产品组件是拆分目标软件产品所得的组件。
其中,待编译产品组件是指根据软件产品特性,将大型软件产品拆分为功能模块相互独立的多个组件模块,每个组件模块都可以作为待编译的产品组件,即本申请中的待编译产品组件可以包括多个待编译的产品组件。组件模块是指构成一个完整软件产品的某部件,功能特性相互独立的软件单元。例如,针对自动驾驶单机版仿真产品,根据该软件产品特性,可以拆分为UI主框架组件、2D播放器组件、地图编辑器组件、3D渲染组件、交通流仿真组件、高精地图服务组件、指标评测组件、仿真毫米波雷达组件、车辆动力学组件、决策规划组件、车辆控制组件等多个相互独立的组件模块,其中,每个拆分后得到的组件模块均可以作为待编译产品组件。
目标软件产品是指待发布的软件产品,目标软件可以包括多种类型的软件产品,例如,目标软件产品可以为大型游戏软件产品、自动驾驶单机版仿真产品、影音娱乐软件产品等。
编译参数是指已配置的针对目标软件产品的编译参数,编译参数用于对目标软件产品中所包含的各个组件进行编译,编译参数可以包括不同类型的编译参数,例如,编译参数可以包括依赖软件版本、编译环境、复用历史产出物等参数。此外,按照不同的划分依据,编译参数还可以分为定制的个性化编译参数和各个组件对应的编译参数。个性化编译参数中又可以包括定制化需求项,例如,禁用或启用某个UI功能特性、是否带加密锁、是否复用某个组件的历史产出物等定制化需求项。各个组件对应的编译参数可以包括采用哪个UE版本来编译该组件、该组件所对应的代码URL路径、代码分支号、所属项目名称编号等参数。
具体的,终端可以获取本地已有的待编译产品组件对应的编译参数,或者终端与其他设备具有关联关系,终端可以获取到其他设备传输的待编译产品组件对应的编译参数。例如,终端与某个服务器具有关联关系,终端可以接收到该服务器分发的待编译产品组件对应的编译参数,这里对终端获取待编译产品组件对应的编译参数的方式不做具体的限定,还可以采用其他的获取方式。其中,待编译产品组件是拆分目标软件产品所得的组件,即待编译产品组件中可以包括多个具有不同功能特性的待编译组件。
例如,以软件产品为自动驾驶单机版仿真产品为例进行举例说明。用户可以根据该软件产品特性,将该软件产品特性拆分为UI主框架组件、2D播放器组件、地图编辑器组件、3D渲染组件、交通流仿真组件、高精地图服务组件、指标评测组件、仿真毫米波雷达组件、车辆动力学组件、决策规划组件、车辆控制组件等多个相互独立的组件模块,则终端可以获取上述拆分后得到的各个组件模块对应的编译参数,并将上述拆分后得到的各个组件作为待编译产品组件。其中,各组件对应的编译参数可以预先配置好的。
步骤204,根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件。
其中,组件划分是指对待编译产品组件中所包含的各个组件进行划分,得到每个组件所属的类别,例如按照编译类型,对待编译产品组件中所包含的各个组件进行划分,得到每个组件所属的编译类别。
第一产品组件是指一种编译类型的产品组件,例如,本申请中的第一产品组件可以为全新编译模式的产品组件。第二产品组件是指另一种编译类型的产品组件,例如,本申请中的第二产品组件可以为复用模式的产品组件,即本申请中的第一产品组件和第二产品组件是用于区分不同编译模式的产品组件。
具体的,终端获取待编译产品组件对应的编译参数之后,终端可以根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件。其中,第一产品组件和第二产品组件为不同编译类型的组件。
例如,以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设终端获取到待编译产品组件中UI主框架组件对应的编译参数为“A1”、地图编辑器组件对应的编译参数为“A2”,并且编译参数“A1”中包含参数“auto”,编译参数“A2”中包含参数“全新编译”,则终端获取上述待编译产品组件对应的编译参数之后,终端可以根据待编译组件对应的编译参数“auto”和“全新编译”,对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件。由于“auto”表示复用模式、“全新编译”表示全新编译模式,因此,终端根据待编译组件对应的编译参数“auto”和“全新编译”,对待编译产品组件进行组件划分时,终端可以将UI主框架组件标记为第二产品组件,同时将地图编辑器组件标记为第一产品组件。即第二产品组件为复用模式的产品组件,第一产品组件为全新编译模式的产品组件。
步骤206,对第一产品组件进行编译,得到第一产品组件对应的编译产出物。
编译产出物是指编译后得到的可执行文件,例如,将源代码文件A进行编译后,得到可执行文件A1,可执行文件A1即为编译产出物。计算机终端能做的工作只是一条一条的执行指令,即执行二进制代码,而程序员所做的是从键盘输入各种数字和字符的组合,最终生成一个文本文件,称为源代码文件,如何把源文件转换为计算机能直接运行的可执行文件,即一串有序的指令,这就是编译的作用,这个转换过程即为编译。
具体的,终端根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件之后,终端可以对第一产品组件进行编译,得到第一产品组件对应的编译产出物。由于本申请中的第一产品组件为全新编译模式的产品组件,因此,终端需要基于第一产品组件对应的编译参数,重新对第一产品组件的源代码文件进行编译,得到对应的编译产出物。
例如,以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设终端获取到待编译产品组件中地图编辑器组件对应的编译参数为“A2”,并且编译参数“A2”中包含参数“全新编译”,则终端获取上述待编译产品组件对应的编译参数之后,由于“全新编译”表示全新编译模式,因此,终端根据待编译组件对应的编译参数“全新编译”,对待编译产品组件进行组件划分时,终端可以将地图编辑器组件标记为第一产品组件,即第一产品组件为全新编译模式的产品组件。进一步的,终端可以对第一产品组件即地图编辑器组件进行编译,得到地图编辑器组件对应的编译产出物。
步骤208,获取第二产品组件对应的历史编译产出物。
历史编译产出物是指过去一段时间范围内的编译产出物,例如,数据库中可以存储各个软件产品最近3个月内的历史编译产出物。
具体的,终端对第一产品组件进行编译,得到第一产品组件对应的编译产出物之后,终端可以获取第二产品组件对应的历史编译产出物。由于本申请中的第二产品组件为复用模式的产品组件,因此,终端不需要重新对第二产品组件的源代码文件进行编译,终端可以直接从数据库中获取符合第二产品编译参数的历史编译产出物,即无需进行编译流程,终端可以将获取到的历史编译产出物作为本次第二产品组件对应的编译产出物。
步骤210,将编译产出物和历史编译产出物进行组装,得到软件产品安装包。
其中,软件产品安装包是指安装包(Install pack),是可自行解压缩文件的集合,其中包括软件安装的所有文件。运行这个安装包(可执行文件),可以将此软件的所有文件释放到硬盘上,完成修改注册表、修改系统设置、创建快捷方式等工作。安装包文件多为exe格式。
具体的,终端获取第二产品组件对应的历史编译产出物之后,终端可以将编译产出物和历史编译产出物进行组装,得到软件产品安装包。例如,终端可以利用打包工具将第一产品组件对应的编译产出物、第二产品组件对应的历史编译产出物以及相关说明文件进行组装,得到软件产品安装包。
以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设终端根据待编译组件对应的编译参数“auto”和“全新编译”,对待编译产品组件进行组件划分时,终端将UI主框架组件标记为第二产品组件,同时将地图编辑器组件标记为第一产品组件。即第二产品组件为复用模式的产品组件,第一产品组件为全新编译模式的产品组件。终端对第一产品组件即地图编辑器组件进行编译,得到地图编辑器组件对应的编译产出物为A1,并获取第二产品组件即UI主框架组件对应的历史编译产出物为B1,则终端可以利用webpack工具将地图编辑器组件对应的编译产出物为A1和UI主框架组件对应的历史编译产出物为B1进行组装,最终生成该自动驾驶单机版仿真产品的安装包。
此外,根据该软件产品的特性,还可以将相关的说明文件与编译产出物、历史编译产出物一起进行组装,最终生成该自动驾驶单机版仿真产品的安装包,说明文件是指软件产品的发布信息,说明文件中的内容包括但不限于产品版本号、组件模块名称、说明文档、示范代码、示范软件配置、示范数据等内容。
上述软件产品的处理方法中,通过获取待编译产品组件对应的编译参数,待编译产品组件是拆分目标软件产品所得的组件;根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件,并对第一产品组件进行编译,得到第一产品组件对应的编译产出物;获取第二产品组件对应的历史编译产出物,将编译产出物和历史编译产出物进行组装,得到软件产品安装包。由于待编译产品组件是拆分目标软件产品所得的组件,故可以根据获取到的待编译产品组件对应的编译参数,对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件,从而可以对拆分后的第一产品组件进行并发编译,并直接复用第二产品组件对应的历史编译产出物,实现了快速高效的将编译产出物和历史编译产出物进行组装,得到软件产品安装包,有效提高了软件产品处理效率。
在一个实施例中,如图3所示,根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件的步骤,包括:
步骤302,基于编译参数中的编译类型,确定待编译产品组件中各产品组件对应的编译模式。
步骤304,将待编译产品组件中编译模式为全新编译模式的产品组件,标记为第一产品组件。
步骤306,将待编译产品组件中编译模式为复用模式的产品组件,标记为第二产品组件。
其中,编译模式是指编译时采用的处理方式,例如,本申请中的编译模式可以包括全新编译模式和复用模式。
具体的,终端获取待编译产品组件对应的编译参数之后,终端可以基于编译参数中的编译类型,确定待编译产品组件中各产品组件对应的编译模式,终端将待编译产品组件中编译模式为全新编译模式的产品组件,标记为第一产品组件;终端将待编译产品组件中编译模式为复用模式的产品组件,标记为第二产品组件。
例如,以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设终端获取到待编译产品组件中UI主框架组件对应的编译参数为“A1”、地图编辑器组件对应的编译参数为“A2”,并且编译参数“A1”中包含参数“auto”,编译参数“A2”中包含参数“全新编译”,则终端获取上述待编译产品组件对应的编译参数之后,终端可以基于编译参数中编译类型参数即“auto”和“全新编译”,确定待编译产品组件中各产品组件对应的编译模式。由于“auto”表示复用模式、“全新编译”表示全新编译模式,因此,终端可以将UI主框架组件标记为第二产品组件,同时将地图编辑器组件标记为第一产品组件。即UI主框架组件采用“auto”的编译方式,地图编辑器组件采用“全新编译”的编译方式。
本实施例中,通过参数配置,可以将待发布的软件产品拆分为功能互相独立的待编译产品组件,并配置不同组件模块对应的编译参数,实现了将大型软件产品进行拆分和并发编译,能够充分利用分布式系统和并发操作提高编译效率。
在一个实施例中,对第一产品组件进行编译,得到第一产品组件对应的编译产出物的步骤,包括:
获取第一产品组件所对应的编译参数中指定的分支代码;
基于分支代码对第一产品组件进行编译,得到第一产品组件对应的编译产出物。
其中,分支代码是指与分支代码号对应的源代码文件,是第一产品组件所对应的源代码文件,例如,分支代码为“trucksim_2022.0_ubuntu”。
具体的,终端根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件之后,终端可以获取第一产品组件所对应的编译参数中指定的源代码文件,对第一产品组件所对应的源代码文件进行编译,得到第一产品组件对应的编译产出物。例如,假设第一产品组件“model_in_loop”对应的编译参数包括:“model_in_loop_GitBranch:master、model_in_loop_BuildType:auto”,则终端可以获取第一产品组件“model_in_loop”对应的编译参数中指定的分支代码号为master,并采用“auto”的编译方式,基于分支代码号master对第一产品组件“model_in_loop”进行编译,得到第一产品组件“model_in_loop”对应的编译产出物。由此使得,实现了将大型软件产品进行拆分和并发编译,能够充分利用分布式系统和并发操作提高编译效率。
在一个实施例中,所述方法还包括:
响应于在配置管理界面触发的设置操作,构建待编译产品组件中各产品组件所对应的编译流水线;
所述基于所述分支代码对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物,包括:
在第一产品组件对应的编译流水线中,按照分支代码对第一产品组件进行编译,得到第一产品组件对应的编译产出物。
具体的,终端响应于用户在配置管理界面触发的设置操作,构建待编译产品组件中各产品组件所对应的编译流水线,即每个产品组件对应一个编译流水线。各个组件需要分别提供一个docker镜像作为该组件的编译环境,可以理解,本申请中编译环境中的信息包括但不限于docker镜像链接URL、docker镜像文件的版本号、docker镜像文件完整性校验码、用户名、密码等信息。编译流水线提供编译参数、环境变量、组件代码库地址、编译步骤和执行命令等信息的定义和设置,并提供API即应用程序接口,可供外部程序查询;同时,本申请中的编译流水线记录每一个编译步骤的执行结果,包括命令是否执行成功、该步骤的产出物、编译日志、每个步骤的耗时等信息。
进一步的,当终端需要对第一产品组件进行编译时,终端可以在第一产品组件对应的编译流水线中,按照分支代码对第一产品组件进行编译,得到第一产品组件对应的编译产出物。例如,如图4所示,为Display组件对应的编译流水线的示意图。如图5所示,为SimCore组件对应的编译流水线的示意图。在编译流水线上,可以配置不同组件模块的编译参数,包括但不限于代码URL路径、代码分支号、所属项目名称编号、是否禁用该模块、是否带加密锁、模块配置文件、模块依赖数据等参数。由于每个组件配置的编译参数不同,因此,在编译流水线中执行编译处理的过程中,每个流水线中的编译步骤的执行结果也会不同,例如,图4中所示的Display组件的每个编译步骤,与图5中所示的SimCore组件的每个编译步骤有一定的差异。
本实施例中,通过参数配置,可以将待发布的软件产品拆分为功能互相独立的待编译产品组件,并配置不同组件模块对应的编译参数,实现了将大型软件产品进行拆分和并发编译,能够充分利用分布式系统和并发操作提高编译效率。
在一个实施例中,构建待编译产品组件中各产品组件所对应的编译流水线的步骤,包括:
依次生成待编译产品组件中各产品组件所对应的编译流水线;
针对待编译产品组件中的各产品组件,响应于在当前产品组件对应的编译流水线上触发的参数设置操作,显示当前产品组件的流水线配置页面;
在流水线配置页面配置流水线参数,得到配置后的编译流水线;编译流水线中配置的流水线参数包含当前产品组件对应的编译参数。
具体的,终端响应于用户在配置管理界面触发的设置操作,构建待编译产品组件中各产品组件所对应的编译流水线,并依次生成待编译产品组件中各产品组件所对应的编译流水线;针对待编译产品组件中的各产品组件,终端响应于在当前产品组件对应的编译流水线上触发的参数设置操作,终端显示当前产品组件的流水线配置页面,终端在流水线配置页面配置流水线参数,得到配置后的编译流水线。其中,编译流水线中配置的流水线参数包含当前产品组件对应的编译参数。
例如,如图6所示,为流水线配置页面的界面示意图。用户可以在终端显示的当前产品组件的流水线配置页面中,输入对应的参数,以使得终端在如图6所示的流水线配置页面中配置流水线参数,并显示配置后的编译流水线的相关参数。比如,图6中已设置的子流水线“model_in_loop”将用master代码分支,采用auto编译方式编译;“trucksim_interface”将用“trucksim_2022.0_ubuntu”代码分支,采用“auto”方式编译。上述“auto”方式,即子流水线根据历史编译情况、传参和代码提交情况,自动保证最新的编译产出。由此使得,编译流程模块根据配置模块下发的各组件编译参数,通过分布式编译系统并行编译各组件,实现了将大型软件产品进行拆分和并发编译,能够充分利用分布式系统和并发操作提高编译效率,并且支持历史版本再次无差异编译,避免再次编译时由于编译环境变化所导致的差异。
在一个实施例中,所述方法还包括:
当第一产品组件完成编译时,获取第一产品组件对应的编译流水线中记录的编译信息;
获取第一产品组件对应的编译流水线对应的流水线参数;
将编译信息和流水线参数存储到数据管理中心,以使其他编译流程获取数据管理中心中存储的信息。
其中,编译信息是指各流水线中记录的组件编译信息,包括但不限于组件产出物信息、组件代码信息等,组件产出物信息中可以包括存储路径、文件大小、文件hash值等信息,组件代码信息可以包括分支号、提交编号、提交人信息等信息。
流水线参数是指各个流水线中配置的编译参数,包括组件编译参数、组件配置信息等参数。组件编译参数包括如依赖软件的版本号、环境信息等参数,组件配置信息包括启动参数、依赖配置等信息。
具体的,当终端完成第一产品组件的编译时,终端可以获取第一产品组件对应的编译流水线中记录的编译信息,同时获取第一产品组件对应的编译流水线对应的流水线参数,终端可以将编译信息和流水线参数存储到数据管理中心,以使其他编译流程获取数据管理中心中存储的信息。即数据管理中心中存储了编译流水线中记录的每一个编译步骤的执行结果,包括命令是否执行成功、该步骤的产出物、编译日志、每个步骤的耗时等信息,以便后续复用时快速查询到对应节点信息。
例如,当终端确定某个产品组件对应的编译模式为复用模式,即需要复用某个历史编译产出物时,终端可以基于该产品组件对应的编译参数,从数据管理中心获取对应的历史编译产出物。由此使得,通过智能复用历史编译产出物,不仅提高了编译效率,节省了计算、存储等资源,而且能有效保证已测试组件的产品质量。
在一个实施例中,获取第二产品组件对应的历史编译产出物的步骤,包括:
当第二产品组件对应的编译模式为复用模式,且第二产品组件对应的编译参数中存在指定的历史编号时,基于历史编号获取第二产品组件对应的历史编译产出物;
当第二产品组件对应的编译模式为复用模式,且第二产品组件对应的编译参数中不存在指定的历史编号时,基于第二产品组件对应的编译参数获取历史编译产出物。
具体的,终端对第一产品组件进行编译,得到第一产品组件对应的编译产出物之后,当终端确定第二产品组件对应的编译模式为复用模式,且第二产品组件对应的编译参数中存在指定的历史编号时,终端可以基于历史编号获取第二产品组件对应的历史编译产出物;或者当终端确定第二产品组件对应的编译模式为复用模式,且第二产品组件对应的编译参数中不存在指定的历史编号时,终端可以基于第二产品组件对应的编译参数获取历史编译产出物。即本申请中的复用模式可以分为:带指定历史编号的复用模式和复用符合条件的历史产出物的复用模式。
例如,当终端确定第二产品组件对应的编译模式为复用模式,且第二产品组件对应的编译参数中存在指定的历史编号时,即表示该产品组件的编译参数中携带了指定的历史编号,需要复用特定的某次历史编译产出物,适用于历史版本再次无差异编译,更新了另外组件的编译产出物但本组件产出物无需更新的场景。
当终端确定第二产品组件对应的编译模式为复用模式,且第二产品组件对应的编译参数中不存在指定的历史编号时,即表示该产品组件的编译参数需要复用最近成功编译的历史产出物,则终端自动根据所传的编译参数,搜索符合编译参数的某次历史编译产出物,由此,有效避免了重复编译,节省了编译时间和编译设备资源。
本实施例中,通过复用历史产出物,均无需编译即可获取该组件对应的产出物,极大地提高了编译效率。
在一个实施例中,将编译产出物和历史编译产出物进行组装,得到软件产品安装包的步骤,包括:
获取目标软件产品对应的产品发布信息;
将编译产出物、历史编译产出物和产品发布信息进行组装,得到目标软件产品的安装包文件。
其中,产品发布信息是指用于说明软件产品的信息,例如,产品发布信息可以包括但不限于产品版本号、组件模块名称、说明文档、示范代码、示范软件配置、示范数据等信息。
具体的,终端可以获取目标软件产品对应的产品发布信息,并利用打包软件,将第一产品组件对应的编译产出物、第二产品组件对应的历史编译产出物和产品发布信息进行组装,得到目标软件产品的安装包文件。可以理解,本申请中将第一产品组件对应的编译产出物、第二产品组件对应的历史编译产出物和产品发布信息进行组装的方式包括但不限于上述采用打包软件的方式,还可以为其他自定义设置的方式。
以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设终端对第一产品组件即地图编辑器组件进行编译,得到地图编辑器组件对应的编译产出物为A1,并获取第二产品组件即UI主框架组件对应的历史编译产出物为B1之后,终端可以获取目标软件产品即自动驾驶单机版仿真产品对应的产品发布信息C1,则终端可以利用webpack工具将地图编辑器组件对应的编译产出物为A1、UI主框架组件对应的历史编译产出物为B1以及和产品发布信息C1进行组装,最终生成该自动驾驶单机版仿真产品的安装包D1。由此使得,实现了大型仿真产品快速编译和发布,同时支持产品高度定制化、历史版本可追溯、缺陷修复再发版质量可控、历史版本再次无差异编译、全自动化的完整产品发布,不仅提高了日常研发效率,而且保障了大型商业软件产品发布的质量,更有利于商业软件的后续长周期的更新维护。
在一个实施例中,所述方法还包括:
响应于产品发版操作,对软件产品安装包进行发版;
当已发版的目标软件产品需要修复时,确定软件产品安装包中待修复的目标产品组件;
获取与目标产品组件对应的已修复分支代码和更新编译参数;
基于更新编译参数对目标产品组件对应的已修复分支代码进行编译,得到目标编译产出物;
将目标编译产出物、目标软件产品中其它产品组件对应的历史编译产出物进行组装,得到更新的软件产品安装包。
其中,更新编译参数是指更新后的编译参数,例如,第一版设置的组件A对应的编译参数为A1,当需要发第二版时,需要对组件A的编译参数进行更新,得到组件A更新后的编译参数为A2,A2即为更新编译参数。
已修复分支代码是指对已发版的分支代码号对应的源代码文件进行修改后,得到更新后的源代码文件,即为已修复分支代码。例如,上次发版的分支代码为“trucksim_2022.0_ubuntu”,研发人员对已发版的分支代码号对应的源代码文件进行修改后,得到已修复分支代码为“trucksim_2022.1_ubuntu”。
具体的,终端将编译产出物和历史编译产出物进行组装,得到软件产品安装包之后,终端响应于用户触发的产品发版操作,对该软件产品安装包进行发版;当已发版的目标软件产品需要修复时,终端确定该软件产品安装包中待修复的目标产品组件;进一步的,终端可以获取与目标产品组件对应的已修复分支代码和更新编译参数,并基于更新编译参数对目标产品组件对应的已修复分支代码进行编译,得到目标编译产出物;终端将目标编译产出物、目标软件产品中其它产品组件对应的历史编译产出物进行组装,得到更新的软件产品安装包。
例如,以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设终端响应于用户触发的产品发版操作,对该软件产品安装包进行发版后,当已发版的上述软件产品需要修复时,终端确定该软件产品安装包中待修复的目标产品组件为3D渲染组件;进一步的,终端可以获取与3D渲染组件对应的已修复分支代码“trucksim_2022.1_ubuntu”和更新编译参数,并基于更新编译参数对3D渲染组件对应的已修复分支代码“trucksim_2022.1_ubuntu”所对应的源代码文件进行编译,得到3D渲染组件对应的目标编译产出物B1;终端将目标编译产出物B1、目标软件产品中其它产品组件对应的历史编译产出物A2、A3进行组装,得到更新的软件产品安装包D1,即D1中的3D渲染组件对应的编译产出物已由上一版的A1更新为B1,而其他组件的编译产出物仍然复用上一版的历史编译产出物A2、A3。
本实施例中,通过上述配置信息,编译出来的软件产品,只更新了3D渲染组件,而自动驾驶单机版仿真产品中的其他组件仍然保留的是与上次发版一样的产出物。这种方式有效避免了再次编译其他组件,从而导致本次编译产出物与上次发版产出物不一致,可能引入新问题的隐患。
在一个实施例中,获取待编译产品组件对应的编译参数之前,所述方法还包括:
响应于在配置管理界面触发的个性化设置操作,配置个性化编译参数;个性化编译参数属于编译参数;
将个性化编译参数下发至编译流程单元;
所述对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物,包括:
基于个性化编译参数对第一产品组件进行编译,得到第一产品组件对应的编译产出物。
其中,个性化编译参数是指针对待发布软件产品的定制化需求,配置的个性化的编译参数。例如,个性化编译参数包括但不限于禁用或启用某个UI功能特性、是否带加密锁、是否使用特定的软件数据文档、是否复用某个组件的历史产出物等定制化需求项。
具体的,终端响应于用户在配置管理界面触发的个性化设置操作,配置个性化编译参数,终端将个性化编译参数下发至编译流程单元;当编译流程单元对第一产品组件进行编译时,编译流程单元可以基于个性化编译参数对第一产品组件进行编译,得到第一产品组件对应的编译产出物。其中,个性化编译参数属于编译参数中的一种。
例如,以软件产品为自动驾驶单机版仿真产品为例进行举例说明。假设在终端获取待编译产品组件对应的编译参数之前,终端响应于用户在配置管理界面触发的个性化设置操作,配置的个性化编译参数为复用组件A的历史产出物,终端将上述个性化编译参数下发至编译流程单元;当编译流程单元对第一产品组件即组件A进行编译时,编译流程单元可以基于个性化编译参数,获取组件A的历史编译产出物,并将获取到的历史编译产出物作为本次编译得到的组件A对应的编译产出物。再比如仿真软件中的三维渲染模块,是基于Ureal Engine(UE)开发的,UE的版本有4.22、4.24、4.25以及4.27等多个版本,每个版本的特性不同,三维渲染模块根据项目需求,可能需要基于不同的UE版本来编译,其中个性化编译参数就可以指定UE_Version,用于指明采用哪个UE版本来编译三维渲染模块。由此使得,可以根据不同的发版需求,采用特定的个性化设置参数,能够通过参数配置高度定制化编译产品,不仅提高了日常研发效率,而且保障了大型商业软件产品发布的质量,更有利于商业软件的后续长周期的更新维护。
在一个实施例中,将编译产出物和历史编译产出物进行组装,得到软件产品安装包之后,所述方法还包括:
确定产品分享方式;
基于产品分享方式启动对应的通信应用;
通过通信应用将软件产品安装包的获取方式发送至测试端,以使测试端基于获取方式获取到软件产品安装包,并测试软件产品安装包。
具体的,终端将编译产出物和历史编译产出物进行组装,得到软件产品安装包之后,终端可以确定产品分享方式,并基于产品分享方式启动对应的通信应用;进一步的,终端可以通过通信应用将软件产品安装包的获取方式发送至测试端,以使测试端基于获取方式获取到软件产品安装包,并测试软件产品安装包。
例如,当终端确定产品分享方式为使用邮件时,则终端可以启动对应的通信应用即某个邮件应用程序;进一步的,终端可以通过该邮件应用程序将软件产品安装包的获取方式发送至测试端,以使测试端基于获取方式获取到软件产品安装包,并测试软件产品安装包。
可以理解,本申请中产品分享方式包括但不限于上述通过邮件的方式,还可以为短信、链接等其他方式。
本实施例中,通过确定产品分享方式,并基于产品分享方式将软件产品安装包的获取方式发送给相关人员,不仅提高了日常研发效率,而且保障了大型商业软件产品发布的质量,更有利于商业软件的后续长周期的更新维护。
本申请还提供一种应用场景,该应用场景应用上述的软件产品的处理方法。具体地,该软件产品的处理方法在该应用场景的应用如下:
当需要对大型仿真软件产品进行处理时,即需要对大型仿真产品快速编译发布时,可以采用上述的软件产品的处理方法,即通过获取待编译产品组件对应的编译参数,待编译产品组件是拆分目标软件产品所得的组件,并根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;对第一产品组件进行编译,得到第一产品组件对应的编译产出物;获取第二产品组件对应的历史编译产出物,并将编译产出物和历史编译产出物进行组装,得到软件产品安装包,再将得到软件产品安装包进行发布。
本申请实施例提供的方法,可以应用于大型仿真产品高度定制化及快速编译发布的场景中。以下以大型仿真产品高度定制化场景为例,对本申请实施例提供的软件产品的处理方法进行说明。
传统方式中,通常需要针对每个软件产品的上百套代码分别进行编译,容易导致大型软件产品的编译时间过长、修复某组件缺陷再次发版质量不可控等问题,同时也无法支持历史版本可追溯、历史版本再次无差异编译,即无法通过参数配置支持高度定制化编译产品,使得软件产品的处理效率较低。
因此,为了解决上述问题,本申请提供了一种大型仿真产品快速编译发布的解决方法,通过融合模块拆分、数据分离、并发编译、复用历史产品包、传参定制化、多平台联动等多种技术,解决了大型软件产品编译时间过长、已发布产品各组件模块代码不可追溯、修复某组件缺陷再次发版质量不可控、已发版产品不能再次无差异二次编译发版、无法通过参数配置支持高度定制化编译产品等多个技术问题。本申请实施例提供的方法,支持产品高度定制化、历史版本可追溯、缺陷修复再发版质量可控、历史版本再次无差异编译、全自动化的完整产品发布,不仅提高了日常研发效率,而且保障了大型商业软件产品发布的质量,更有利于商业软件的后续长周期的更新维护。
在产品侧,本申请实施例提供的方法可实现如下功能:
1、产品功能特性高度定制化快速编译
本申请实施例中,可以根据软件产品的定制化需求,通过配置管理模块下发软件产品编译参数给编译流程模块。其中,定制化需求包括但不限于禁用或启用某个UI功能特性、是否带加密锁、根据不同的发版需求,是否启用特定的数据文档、是否复用某个组件的历史产出物等。
编译流程模块根据接收到的编译参数,分别编译各组件。若编译参数中表明需要复用某个组件的历史产出物,则无需编译该组件,编译流程模块可以直接获取历史编译产出物作为本次编译产出物即可,可以节省大量编译时间。
打包管理模块根据软件产品的定制化需求,将上述各组件集成组装成一个完整的软件产品。
2、更新特定模块并复用其他组件模块历史产出物
当某次发版的仿真产品出现缺陷,需要修复时,比如A组件需要修复,但B、C、D组件不用修改,则研发人员可以通过配置管理模块,下发更新后的编译参数指定组件A编译时,采用最新修复的某个分支编译,组件B、C、D则复用上次发版编译的历史编译产物。通过上述配置信息,编译出来的软件产品,只更新了组件A,组件B、C、D仍然保留的是与上次发版一样的产出物。采用这种方式有效避免了再次编译组件B、C、D从而导致本次编译产出物与上次发版产出物不一致,可能引入新问题的隐患。
在技术侧,如图7所示,为大型仿真产品快速编译发布的处理流程图。
本申请实施例中的系统主要由配置管理模块、代码管理模块、编译流程模块、数据管理模块、打包管理模块等组成。
具体步骤如下:
1、将产品拆分为多个组件模块
根据软件产品特性,将大型软件产品拆分为功能模块相互独立的多个组件模块,各组件模块能相互独立地编译,不存在编译依赖关系。
软件产品拆分组件模块原则如下:
A)各组件模块的功能相互独立,能对外提供完整的子服务;
B)各组件模块能够相互独立地编译和运行;
C)各组件模块不存在相互依赖的编译关系,即不允许组件A的编译,需要依赖组件B编译完成的产出物。
例如,自动驾驶单机版仿真产品,可以拆分为UI主框架、2D播放器、地图编辑器、3D渲染、交通流仿真、高精地图服务、指标评测、仿真毫米波雷达、车辆动力学、决策规划、车辆控制等相互独立的多个组件模块。其中,上述仿真产品是指对外发布或内部测试的自动驾驶仿真软件产品,包括但不限于云端部署的安装包、桌面单机版安装包等软件产品、技术文档和相关数据等。
2、建立各组件编译流水线
通过本系统的编译流程模块,分别对上述软件产品拆分后的各组件建立编译流水线。
编译流水线具体建设方法如下:
A)各组件模块需要分别提供一个docker镜像作为该组件的编译环境,包括但不限于docker镜像链接URL、docker镜像文件的版本号、docker镜像文件完整性校验码、用户名、密码等信息;
B)编译流水线提供编译参数、环境变量、组件代码库地址、编译步骤和执行命令等信息的定义和设置;
C)编译流水线提供下述第5个步骤中的各种编译信息,并提供API即应用程序接口可供外部程序查询;
D)编译流水线记录每一个编译步骤的执行结果,包括命令是否执行成功、该步骤的产出物、编译日志、每个步骤的耗时等信息。
3、配置各组件模块的编译参数
在编译流水线上,配置不同组件模块的编译参数,包括但不限于代码URL路径、代码分支号、所属项目名称编号、是否禁用该模块、是否带加密锁、模块配置文件、模块依赖数据等。
4、分布式编译组件模块
编译流程模块根据配置模块下发的各组件编译参数,通过分布式编译系统并行编译各组件。如图8所示,为分布式编译处理的流程示意图。
1)如图8所示,若确定为全新编译,则根据指定的编译参数,立即拉取组件代码编译最新的产出物;
2)如图8所示,若确定为复用历史产出,分为带指定历史编号或复用最近成功编译两种方式,均无需编译即可获取该组件产出物,极大地提高了编译效率。具体如下:
A)其中带指定历史编号,可以复用特定的某次历史编译产出物,适用于历史版本再次无差异编译,更新了另外组件但本组件无需更新等场景。
B)其中复用最近成功,则自动根据所传的编译参数,搜索符合编译参数的某次历史产出物,避免了重复编译,节省了编译时间和编译设备资源。
例如,如图9所示,为分布式编译具体的实例流程图。图9中,“module_build”步骤调用了simcore、simfe、planning、controller、Vehicle dynamic等各组件的子编译流水线,实现了各子流水线相互独立地并发编译。
5、存储各编译信息
当各组件编译完成后,将本次编译信息和配置信息存储到数据管理模块,所存储信息包括但不限于组件编译参数(如依赖软件的版本号、环境信息等)、组件产出物信息(存储路径、文件大小、文件hash值等)、组件代码信息(分支号,提交编号、提交人信息等)、组件配置信息等(如启动参数、依赖配置等)。
存储各流水线组件编译信息,便于其他编译步骤获取和利用相关信息,如上述第4个步骤中的利用历史编译产出方式。
6、集成组装软件产品
打包管理模块,负责根据产品配置信息,将各组件产出物组装成一个完整的软件产品安装包,并附带上软件产品的说明文档、示例代码、示范数据等信息。
具体实施步骤如下:
A)获取软件产品发布信息,包括但不限于产品版本号、组件模块名称、说明文档、示范代码、示范软件配置、示范数据等;
B)根据需要发布的各组件信息,分别从对应组件的流水线获取组件编译产出物;
C)通过打包软件,将各组件模块和上述步骤A)获取到的信息文件,组装成一个完整的软件产品安装包文件;
D)通过邮件、短信等方式将软件产品获取方式发送给相关人员。
本实施例中的方法所产生的有益效果包括:
1、将大型软件产品进行拆分和并发编译,能够充分利用分布式系统和并发操作提高编译效率;
2、通过智能复用历史产出物,不仅提高了编译效率,节省了计算、存储等资源,而且能有效保证已测试组件的产品质量;
3、支持历史版本再次无差异编译,避免再次编译时由于编译环境变化所导致的差异。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的软件产品的处理方法的软件产品的处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个软件产品的处理装置实施例中的具体限定可以参见上文中对于软件产品的处理方法的限定,在此不再赘述。
在一个实施例中,如图10所示,提供了一种软件产品的处理装置,包括:获取模块1002、划分模块1004、编译模块1006和组装模块1008,其中:
获取模块1002,用于获取待编译产品组件对应的编译参数;待编译产品组件是拆分目标软件产品所得的组件。
划分模块1004,用于根据编译参数对待编译产品组件进行组件划分,得到第一产品组件和第二产品组件。
编译模块1006,用于对第一产品组件进行编译,得到第一产品组件对应的编译产出物。
获取模块1002还用于获取第二产品组件对应的历史编译产出物。
组装模块1008,用于将编译产出物和历史编译产出物进行组装,得到软件产品安装包。
在一个实施例中,所述装置还包括:确定模块,用于基于所述编译参数中的编译类型,确定所述待编译产品组件中各产品组件对应的编译模式;标记模块,用于将所述待编译产品组件中编译模式为全新编译模式的产品组件,标记为第一产品组件;将所述待编译产品组件中编译模式为复用模式的产品组件,标记为第二产品组件。
在一个实施例中,获取模块还用于获取所述第一产品组件所对应的编译参数中指定的分支代码;编译模块还用于基于所述分支代码对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物。
在一个实施例中,所述装置还包括:构建模块,用于响应于在配置管理界面触发的设置操作,构建所述待编译产品组件中各产品组件所对应的编译流水线;编译模块还用于在所述第一产品组件对应的编译流水线中,按照所述分支代码对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物。
在一个实施例中,所述装置还包括:生成模块,用于依次生成所述待编译产品组件中各产品组件所对应的编译流水线;显示模块,用于针对所述待编译产品组件中的各产品组件,响应于在当前产品组件对应的编译流水线上触发的参数设置操作,显示所述当前产品组件的流水线配置页面;配置模块,用于在所述流水线配置页面配置流水线参数,得到配置后的编译流水线;所述编译流水线中配置的流水线参数包含所述当前产品组件对应的编译参数。
在一个实施例中,所述装置还包括:获取模块还用于当所述第一产品组件完成编译时,获取所述第一产品组件对应的编译流水线中记录的编译信息;获取所述第一产品组件对应的编译流水线对应的流水线参数;存储模块,用于将所述编译信息和所述流水线参数存储到数据管理中心,以使其他编译流程获取所述数据管理中心中存储的信息。
在一个实施例中,获取模块还用于当所述第二产品组件对应的编译模式为复用模式,且所述第二产品组件对应的编译参数中存在指定的历史编号时,基于所述历史编号获取所述第二产品组件对应的历史编译产出物;当所述第二产品组件对应的编译模式为复用模式,且所述第二产品组件对应的编译参数中不存在指定的历史编号时,基于所述第二产品组件对应的编译参数获取历史编译产出物。
在一个实施例中,获取模块还用于获取所述目标软件产品对应的产品发布信息;组装模块还用于将所述编译产出物、所述历史编译产出物和所述产品发布信息进行组装,得到所述目标软件产品的安装包文件。
在一个实施例中,所述装置还包括:发版模块,用于响应于产品发版操作,对所述软件产品安装包进行发版;确定模块还用于当已发版的所述目标软件产品需要修复时,确定所述软件产品安装包中待修复的目标产品组件;获取模块还用于获取与所述目标产品组件对应的更新编译参数;编译模块还用于基于所述更新编译参数对所述目标产品组件进行编译,得到目标编译产出物;组装模块还用于将所述目标编译产出物、所述目标软件产品中其它产品组件对应的历史编译产出物进行组装,得到更新的软件产品安装包。
在一个实施例中,所述装置还包括:配置模块还用于响应于在配置管理界面触发的个性化设置操作,配置个性化编译参数;所述个性化编译参数属于所述编译参数;下发模块,用于将所述个性化编译参数下发至编译流程单元;编译模块还用于基于所述个性化编译参数对对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物。
在一个实施例中,所述装置还包括:确定模块还用于确定产品分享方式;启动模块,用于基于所述产品分享方式启动对应的通信应用;发送模块,用于通过所述通信应用将所述软件产品安装包的获取方式发送至测试端,以使所述测试端基于所述获取方式获取到所述软件产品安装包,并测试所述软件产品安装包。
上述软件产品的处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种软件产品的处理方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (15)
1.一种软件产品的处理方法,其特征在于,所述方法包括:
获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;
根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;
对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;
获取所述第二产品组件对应的历史编译产出物;
将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
2.根据权利要求1所述的方法,其特征在于,所述根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件,包括:
基于所述编译参数中的编译类型,确定所述待编译产品组件中各产品组件对应的编译模式;
将所述待编译产品组件中编译模式为全新编译模式的产品组件,标记为第一产品组件;
将所述待编译产品组件中编译模式为复用模式的产品组件,标记为第二产品组件。
3.根据权利要求1所述的方法,其特征在于,所述对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物,包括:
获取所述第一产品组件所对应的编译参数中指定的分支代码;
基于所述分支代码对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
响应于在配置管理界面触发的设置操作,构建所述待编译产品组件中各产品组件所对应的编译流水线;
所述基于所述分支代码对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物,包括:
在所述第一产品组件对应的编译流水线中,按照所述分支代码对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物。
5.根据权利要求4所述的方法,其特征在于,所述构建所述待编译产品组件中各产品组件所对应的编译流水线,包括:
依次生成所述待编译产品组件中各产品组件所对应的编译流水线;
针对所述待编译产品组件中的各产品组件,响应于在当前产品组件对应的编译流水线上触发的参数设置操作,显示所述当前产品组件的流水线配置页面;
在所述流水线配置页面配置流水线参数,得到配置后的编译流水线;所述编译流水线中配置的流水线参数包含所述当前产品组件对应的编译参数。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述第一产品组件完成编译时,获取所述第一产品组件对应的编译流水线中记录的编译信息;
获取所述第一产品组件对应的编译流水线对应的流水线参数;
将所述编译信息和所述流水线参数存储到数据管理中心,以使其他编译流程获取所述数据管理中心中存储的信息。
7.根据权利要求1所述的方法,其特征在于,所述获取所述第二产品组件对应的历史编译产出物,包括:
当所述第二产品组件对应的编译模式为复用模式,且所述第二产品组件对应的编译参数中存在指定的历史编号时,基于所述历史编号获取所述第二产品组件对应的历史编译产出物;
当所述第二产品组件对应的编译模式为复用模式,且所述第二产品组件对应的编译参数中不存在指定的历史编号时,基于所述第二产品组件对应的编译参数获取历史编译产出物。
8.根据权利要求1所述的方法,其特征在于,所述将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包,包括:
获取所述目标软件产品对应的产品发布信息;
将所述编译产出物、所述历史编译产出物和所述产品发布信息进行组装,得到所述目标软件产品的安装包文件。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述方法还包括:
响应于产品发版操作,对所述软件产品安装包进行发版;
当已发版的所述目标软件产品需要修复时,确定所述软件产品安装包中待修复的目标产品组件;
获取与所述目标产品组件对应的已修复分支代码和更新编译参数;
基于所述更新编译参数对所述目标产品组件对应的已修复分支代码进行编译,得到目标编译产出物;
将所述目标编译产出物、所述目标软件产品中其它产品组件对应的历史编译产出物进行组装,得到更新的软件产品安装包。
10.根据权利要求1所述的方法,其特征在于,所述获取待编译产品组件对应的编译参数之前,所述方法还包括:
响应于在配置管理界面触发的个性化设置操作,配置个性化编译参数;所述个性化编译参数属于所述编译参数;
将所述个性化编译参数下发至编译流程单元;
所述对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物,包括:
基于所述个性化编译参数对对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物。
11.根据权利要求1所述的方法,其特征在于,所述将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包之后,所述方法还包括:
确定产品分享方式;
基于所述产品分享方式启动对应的通信应用;
通过所述通信应用将所述软件产品安装包的获取方式发送至测试端,以使所述测试端基于所述获取方式获取到所述软件产品安装包,并测试所述软件产品安装包。
12.一种软件产品的处理装置,其特征在于,所述装置包括:
获取模块,用于获取待编译产品组件对应的编译参数;所述待编译产品组件是拆分目标软件产品所得的组件;
划分模块,用于根据所述编译参数对所述待编译产品组件进行组件划分,得到第一产品组件和第二产品组件;
编译模块,用于对所述第一产品组件进行编译,得到所述第一产品组件对应的编译产出物;
所述获取模块还用于获取所述第二产品组件对应的历史编译产出物;
组装模块,用于将所述编译产出物和所述历史编译产出物进行组装,得到软件产品安装包。
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
15.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210361956.9A CN114564207A (zh) | 2022-04-07 | 2022-04-07 | 软件产品的处理方法、装置、计算机设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210361956.9A CN114564207A (zh) | 2022-04-07 | 2022-04-07 | 软件产品的处理方法、装置、计算机设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114564207A true CN114564207A (zh) | 2022-05-31 |
Family
ID=81721179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210361956.9A Pending CN114564207A (zh) | 2022-04-07 | 2022-04-07 | 软件产品的处理方法、装置、计算机设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114564207A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115361543A (zh) * | 2022-10-21 | 2022-11-18 | 武汉光谷信息技术股份有限公司 | 一种基于arm架构的异构数据融合与推流方法、系统 |
-
2022
- 2022-04-07 CN CN202210361956.9A patent/CN114564207A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115361543A (zh) * | 2022-10-21 | 2022-11-18 | 武汉光谷信息技术股份有限公司 | 一种基于arm架构的异构数据融合与推流方法、系统 |
CN115361543B (zh) * | 2022-10-21 | 2023-03-24 | 武汉光谷信息技术股份有限公司 | 一种基于arm架构的异构数据融合与推流方法、系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101681335B (zh) | 用于向外围系统分发计算机仿真产品设计和制造数据的方法和系统 | |
CN108388445B (zh) | 一种基于“平台+应用”模式的持续集成方法 | |
CN110851167B (zh) | 容器环境更新方法、装置、设备及存储介质 | |
US20180088926A1 (en) | Container image management using layer deltas | |
US11733975B1 (en) | System and method for migrating legacy software to a system common architecture | |
US11327726B2 (en) | Workflow engine tool | |
CN106020803B (zh) | 被监控对象模板的动态定义方法及装置 | |
CN102930580A (zh) | 数据帧动画 | |
CN109298900A (zh) | 一种应用拆分以及按需加载方法、装置 | |
US20210365245A1 (en) | Method and system for implementing application lineage metadata and registration | |
US20240144576A1 (en) | 3d object management data, computer program, and distributed management method for 3d object | |
CN111104103A (zh) | 一种软件编辑微服务的可视化方法及系统 | |
US20200379982A1 (en) | Information processing system and method of controlling information processing system | |
CN109086442A (zh) | 业务数据的展示方法及装置 | |
CN114564207A (zh) | 软件产品的处理方法、装置、计算机设备、存储介质 | |
US20180101164A1 (en) | Templates in a multidisciplinary engineering system | |
CN102857817B (zh) | 一种可动态加载的机顶盒生产系统及方法 | |
CN116126710A (zh) | 一种车载软件仿真方法、装置、设备及介质 | |
CN114265595B (zh) | 一种基于智能合约的云原生应用开发与部署系统和方法 | |
US20220413843A1 (en) | Combining model-driven applications and canvas-type applications with application lifecycle management | |
CN115016754A (zh) | 设备间的页面同步显示方法、装置、电子设备及介质 | |
CN114489861A (zh) | 目标组件转化方法、装置、电子设备及可读存储介质 | |
CN114398282A (zh) | 测试脚本的生成方法、装置、设备及存储介质 | |
CN116157774A (zh) | 用于在云计算环境中提供工业设备的工程的方法和系统 | |
Grüner et al. | Towards asset administration shell-based continuous engineering in process industries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |