一种基于配置文件的项目构建方法、系统及相关设备与流程

文档序号:31863199发布日期:2022-10-19 06:52阅读:44来源:国知局
一种基于配置文件的项目构建方法、系统及相关设备与流程

1.本发明涉及软件开发技术领域,尤其涉及的是一种基于配置文件的项目构建方法、系统及相关设备。


背景技术:

2.随着科学技术的发展,越来越多的软件被开发和改进并应用于不同的领域或场景中。目前在软件开发过程中,为了加快项目的研发速度以及减少代码开发工作量,可以通过依赖包来实现项目通用功能,即项目的构建过程中需要使用依赖包。
3.现有技术中,通常直接从私有程序包存储库中获取依赖包来构建项目。现有技术的问题在于,私有程序包存储库中可能缺少项目所需的依赖包从而导致项目无法构建,不利于提高项目构建的成功率。
4.因此,现有技术还有待改进和发展。


技术实现要素:

5.本发明的主要目的在于提供一种基于配置文件的项目构建方法、系统及相关设备,旨在解决现有技术中直接从私有程序包存储库中获取依赖包来构建项目的方案不利于提高项目构建的成功率的问题。
6.为了实现上述目的,本发明第一方面提供一种基于配置文件的项目构建方法,其中,上述基于配置文件的项目构建方法包括:
7.获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息;
8.获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包;
9.通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包;
10.根据上述目标替换依赖包构建上述目标项目。
11.可选的,上述获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,包括:
12.基于依赖包管理表获取依赖包管理信息,其中,上述依赖包管理表用于存储上述私有程序包存储库中存储的各依赖包的名称、版本信息、依赖关系信息、私有标志信息、更新时间和存储位置;
13.将上述依赖包管理信息与上述依赖包信息进行对比,将与上述配置文件对应但上述私有程序包存储库中未存储的依赖包作为上述待更新依赖包;
14.将上述依赖包管理信息与上述依赖包信息中具有相同名称但版本信息不同的依
赖包作为上述待更新依赖包。
15.可选的,上述依赖包管理信息还包括上述私有程序包存储库中存储的各依赖包的依赖关系信息,上述获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,还包括:
16.根据上述依赖关系信息,将待使用依赖包在使用时需要依赖且在上述私有程序包存储库中未存储的依赖包作为上述待更新依赖包,其中,上述待使用依赖包是上述私有程序包存储库中的任意一个依赖包。
17.可选的,上述方法还包括:
18.获取上述私有程序包存储库中存储的各依赖包的代码更新最新时间;
19.对于上述私有程序包存储库中存储的各依赖包,将对应的代码更新最新时间与上述依赖包管理信息中的更新时间进行对比,将上述代码更新最新时间晚于上述更新时间的依赖包作为上述待更新依赖包
20.可选的,上述通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包,包括:
21.将各上述待更新依赖包分别划分为第三方依赖包或项目私有依赖包;
22.通过互联网下载获取各上述第三方依赖包对应的待扫描替换依赖包;
23.基于devops平台中对应的持续集成流水线生成各上述项目私有依赖包对应的待扫描替换依赖包;
24.对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包。
25.可选的,在上述通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包之后,上述方法还包括:
26.将上述目标替换依赖包存储到上述私有程序包存储库中,并更新上述依赖包管理信息。
27.本发明第二方面提供一种基于配置文件的项目构建系统,其中,上述基于配置文件的项目构建系统包括:
28.配置解析模块,用于获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息;
29.依赖包对比模块,用于获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包;
30.依赖包获取模块,用于通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包;
31.安全扫描模块,用于对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包;
32.项目构建模块,用于根据上述目标替换依赖包构建上述目标项目。
33.可选的,上述依赖包获取模块包括:
34.依赖包类别确定单元,用于将各上述待更新依赖包分别划分为第三方依赖包或项目私有依赖包;
35.第三方包处理单元,用于通过互联网下载获取各上述第三方依赖包对应的待扫描替换依赖包;
36.项目私有包处理单元,用于基于devops平台中对应的持续集成流水线生成各上述项目私有依赖包对应的待扫描替换依赖包。
37.本发明第三方面提供一种智能终端,上述智能终端包括存储器、处理器以及存储在上述存储器上并可在上述处理器上运行的基于配置文件的项目构建程序,上述基于配置文件的项目构建程序被上述处理器执行时实现上述任意一种基于配置文件的项目构建方法的步骤。
38.本发明第四方面提供一种计算机可读存储介质,上述计算机可读存储介质上存储有基于配置文件的项目构建程序,上述基于配置文件的项目构建程序被处理器执行时实现上述任意一种基于配置文件的项目构建方法的步骤。
39.由上可见,本发明方案中,获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息;获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包;通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包;根据上述目标替换依赖包构建上述目标项目。
40.与现有技术中直接从私有程序包存储库中获取依赖包来构建项目的方案相比,本发明中会将配置文件中需要的依赖包的依赖包信息与依赖包管理信息进行对比确定待更新依赖包(即私有程序包存储库中缺失的依赖包和/或版本异常的依赖包),再通过依赖包下载和/或依赖包生成的方式获取待更新依赖包对应的待扫描替换依赖包并进行安全扫描。从而可以保障获取到构建项目所需要的所有依赖包并进行项目构建,避免私有程序包存储库中可能缺少项目所需的依赖包从而导致项目无法构建的问题出现,有利于提高项目构建的成功率。同时,进行安全扫描还有利于保障所获得的依赖包是符合安全规范的,可以进一步提高项目构建的成功率。
附图说明
41.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
42.图1是本发明实施例提供的一种基于配置文件的项目构建方法的流程示意图;
43.图2是本发明实施例图1中步骤s200的具体流程示意图;
44.图3是本发明实施例提供的一种基于配置文件的项目构建系统的结构示意图;
45.图4是本发明实施例提供的一种基于配置文件的项目构建系统的具体结构示意图;
46.图5是本发明实施例提供的一种获取目标替换依赖包的具体流程示意图;
47.图6是本发明实施例提供的一种获取目标替换依赖包的步骤对应的处理逻辑示意图;
48.图7是本发明实施例提供的一种智能终端的内部结构原理框图。
具体实施方式
49.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况下,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
50.应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
51.还应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
52.还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
53.如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当

时”或“一旦”或“响应于确定”或“响应于检测到”。类似的,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述的条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0054]
下面结合本发明实施例的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0055]
随着科学技术的发展,越来越多的软件被开发和改进并应用于不同的领域或场景中。目前在软件开发过程中,为了加快项目的研发速度以及减少代码开发工作量,可以通过依赖包来实现项目通用功能,即项目的构建过程中需要使用依赖包。
[0056]
现有技术中,通常直接从私有程序包存储库中获取依赖包来构建项目。现有技术的问题在于,私有程序包存储库中可能缺少项目所需的依赖包从而导致项目无法构建,不利于提高项目构建的成功率。同时,私有程序存储库中已经存储的依赖包也可能存在版本信息不对、不符合安全规范等问题,从而可能影响项目进度,不利于提高项目构建的成功率和效率。
[0057]
在一种应用场景中,可以基于devops系统(或平台)进行项目构建和软件开发,devops可以是一组过程、方法与系统的统称,其目的是提高软件开发的敏捷性和集成性。devops系统中设置有持续集成(ci,continuous integration)流水线,ci流水线可以代表
在代码变更后自动检测、拉取、编译构建,最终生成可用于部署到环境的制品的过程,其中,上述制品是指可以用于部署到测试环境、生产环境的程序包,如java项目的jar包。
[0058]
在devops平台下,依赖包存储在本地制品仓库(即私有程序包存储库)中,在进行项目构建时,通常直接从本地制品仓库中获取依赖包来构建项目。因此,本发明中还将项目编译构建与本地制品仓库中依赖包的更新进行紧密结合,根据项目需求进行本地制品仓库中依赖包的更新。
[0059]
具体的,依赖包可以分为第三方依赖包和项目私有依赖包。对于第三方依赖包,在项目编译构建时,根据项目配置文件内容,首先从本地制品仓库拉取,在本地制品仓库没有找到依赖包的情况下,可以通过本地制品仓库的代理从互联网的依赖包仓库下载,并存储到本地制品仓库,继续完成编译构建,已下载的本地制品仓库的依赖包也可供其他项目构建时使用。对于项目私有依赖包,依赖包的代码保存在代码仓库中,并配置有相应的ci流水线,在执行流水线构建后,流水线完成私有依赖包的代码从代码仓库的拉取、编译构建,得到私有依赖包制品并存入本地制品仓库,也可以供其他项目构建时使用。
[0060]
具体的,为了解决上述多个问题中的至少一个问题,本发明方案中,获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息;获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包;通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包;根据上述目标替换依赖包构建上述目标项目。
[0061]
与现有技术中直接从私有程序包存储库中获取依赖包来构建项目的方案相比,本发明中会将配置文件中需要的依赖包的依赖包信息与依赖包管理信息进行对比确定待更新依赖包(即私有程序包存储库中缺失的依赖包和/或版本异常的依赖包),再通过依赖包下载和/或依赖包生成的方式获取待更新依赖包对应的待扫描替换依赖包并进行安全扫描。从而可以保障获取到构建项目所需要的所有依赖包并进行项目构建,避免私有程序包存储库中可能缺少项目所需的依赖包从而导致项目无法构建的问题出现,有利于提高项目构建的成功率。同时,进行安全扫描还有利于保障所获得的依赖包是符合安全规范的,可以进一步提高项目构建的成功率。
[0062]
同时,在一种应用场景中,可能出现私有程序包存储库中依赖包的名称和版本信息都符合要求,但该依赖包对应的构建代码实际上发生了变化,而依赖包却没有重新构建,从而导致依赖包与实际需要的依赖包不同的问题,也会影响项目的构建成功率。因此本实施例中还可以根据依赖包对应的代码仓库中代码对应的代码更新最新时间和依赖包实际的最后更新时间确定该依赖包是否需要重新生成。
[0063]
需要说明的是,在另一种应用场景中,在进行项目构建的过程中可能直接从互联网依赖包存储库中拉取依赖包,则可能由于网络问题或互联网依赖包存储库不可用等问题导致拉取依赖包失败从而导致项目构建失败。因此还可以基于本实施例中方案在正式构建项目之前先判断私有程序包存储库中缺失的依赖包,预先从互联网依赖包存储库中下载对应的依赖包,如果不能拉取则提醒工作人员进行预先处理,从而避免在项目构建时出现问
题,保障项目的构建,提高项目构建的成功率。
[0064]
如图1所示,本发明实施例提供一种基于配置文件的项目构建方法,具体的,上述方法包括如下步骤:
[0065]
步骤s100,获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息。
[0066]
其中,目标项目是需要构建的项目,配置文件是构建目标项目时需要使用的配置文件。具体的,配置文件需要基于一个或多个(通常为多个)依赖包来构建对应的目标项目,因此可以从配置文件中提取其需要使用到的依赖包的信息,作为依赖包信息。
[0067]
具体的,devops平台可以通过对各种工具进行集成,实现整个it软件开发项目的有效管理。本实施例中,可以在devops平台中读取用于构建目标项目的配置文件,例如,从devops平台的代码仓库获取项目代码,从而根据项目代码获取对应的配置文件。本实施例中,提取获得的依赖包信息包括配置文件所需要的各个依赖包的名称和版本信息,实际使用过程中,还可以包括其它信息,例如依赖包之间的依赖关系信息、依赖包的更新时间要求信息等,在此不做具体限定。其中,上述依赖关系信息用于描述各个依赖包在使用过程中还需要依赖的其它依赖包的信息,上述更新时间要求信息用于描述各个依赖包对应的更新时间(即要求各个依赖包至少是在某时间之后更新过的)。
[0068]
步骤s200,获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包。
[0069]
其中,上述依赖包管理信息是私有程序包存储库(即本地制品仓库)中存储的各个依赖包的信息,本实施例中获取的包括名称和版本信息,实际使用过程中还可以获取其它信息,例如依赖包之间的依赖关系信息、依赖包的更新时间等,在此不作具体限定。
[0070]
具体的,本实施例中,如图2所示,上述步骤s200包括如下具体步骤:
[0071]
步骤s201,基于依赖包管理表获取依赖包管理信息,其中,上述依赖包管理表用于存储上述私有程序包存储库中存储的各依赖包的名称、版本信息、依赖关系信息、私有标志信息、更新时间和存储位置。
[0072]
步骤s202,将上述依赖包管理信息与上述依赖包信息进行对比,将与上述配置文件对应但上述私有程序包存储库中未存储的依赖包作为上述待更新依赖包。
[0073]
步骤s203,将上述依赖包管理信息与上述依赖包信息中具有相同名称但版本信息不同的依赖包作为上述待更新依赖包。
[0074]
其中,上述私有程序包存储库可以由一个或多个工具组成,例如,可以通过devops平台的nexus、harbor、jfrog artifactory等工具的任意组合来作为私有程序包存储库。且私有程序包存储库中的各个工具可以是单节点或集群部署,本实施例中以多工具、多节点部署的私有程序包存储库为例进行说明,但不作为具体限定。
[0075]
进一步的,对于多工具、多节点部署的私有程序包存储库,在进行信息对比时需要查找各个节点处是否存在对应的依赖包,如果依次遍历各个节点需要耗费较长时间,且私有程序包存储库不会存储依赖包之间的依赖关系,因此本实施例中可以设置依赖包管理表,用于对私有程序包存储库中的依赖包的信息做统一的管理,从而方便进行信息对比和
依赖包管理,有利于提高信息对比和依赖包的管理效率。
[0076]
具体的,将依赖包管理信息与依赖包信息进行对比,可以获得目标项目的配置文件中新增的依赖包(即在私有程序包存储库中未存储但是配置文件中需要用到的依赖包)和版本不匹配的依赖包(即在私有程序包存储库中有存储但是与配置文件中要求的版本信息不同的依赖包)。需要说明的是,本实施例中的版本不匹配的依赖包是版本需要更新的依赖包,即配置文件中要求的版本高于私有程序包存储库中已经存储的版本的依赖包。
[0077]
需要说明的是,在一种应用场景中,上述方法还包括:获取上述私有程序包存储库中存储的各依赖包的代码更新最新时间;对于上述私有程序包存储库中存储的各依赖包,将对应的代码更新最新时间与上述依赖包管理信息中的更新时间进行对比,将上述代码更新最新时间晚于上述更新时间的依赖包作为上述待更新依赖包。
[0078]
具体的,依赖包的代码更新最新时间是提交该依赖包的代码的最后更新时间,依赖包管理信息中的更新时间则是该依赖包的最后更新时间。本实施例中,将两者进行对比,可以筛选出对应的代码已经发生了改变但依赖包未进行更新的依赖包并作为待更新依赖包,并根据最新的代码将其重新进行生成,以避免依赖包出错。
[0079]
在另一种应用场景中,上述依赖包管理信息还包括上述私有程序包存储库中存储的各依赖包的依赖关系信息,上述获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,还包括:根据上述依赖关系信息,将待使用依赖包在使用时需要依赖且在上述私有程序包存储库中未存储的依赖包作为上述待更新依赖包,其中,上述待使用依赖包是上述私有程序包存储库中的任意一个依赖包或者配置文件对应的任意一个依赖包。从而可以保证各个依赖包在使用时所需要依赖的依赖包(即存在依赖关联关系的依赖包)也会被更新或下载保存,进一步提高项目构建的效率和成功率。
[0080]
步骤s300,通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包。
[0081]
具体的,上述待更新依赖包代表的是私有程序包存储库中无法满足目标项目的构建要求的依赖包或对应缺失的依赖包,因此需要对其进行更新。本实施例中,上述步骤s300包括如下步骤:将各上述待更新依赖包分别划分为第三方依赖包或项目私有依赖包;通过互联网下载获取各上述第三方依赖包对应的待扫描替换依赖包;基于devops平台中对应的持续集成流水线生成各上述项目私有依赖包对应的待扫描替换依赖包;对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包。
[0082]
具体的,待更新依赖包根据其类别特点可以划分为第三方依赖包或项目私有依赖包。其中,上述第三方依赖包是指可以从互联网下载获取的非目标项目所独有的依赖包,上述项目私有依赖包则是根据目标项目的需求定制的私有的依赖包。在一种应用场景中,可以根据依赖包的名称区分第三方依赖包和项目私有依赖包,例如在项目私有依赖包的名称前缀设置特殊的字符(如vispractice)以作为区分。在另一种应用场景中,可以为各个依赖包单独设置对应的私有标志信息,从而根据私有标志信息确定是否为项目私有依赖包。
[0083]
进一步的,本实施例中,在获取到对应的待扫描替换依赖包之后,还需要对待扫描替换依赖包进行安全扫描,以避免出现不符合安全规范的问题。
[0084]
需要说明的是,在项目从互联网的依赖包仓库拉取第三方依赖包进行编译构建时,可能拉取到不符合目标项目对应的预先设置的安全规范信息要求的依赖包,最终导致
项目构建失败或存在安全隐患。在项目从本地制品仓库拉取项目私有依赖包进行编译构建时,可能由于项目私有依赖包的代码进行了更新但对应的ci流水线未执行或执行未完成导致存储在本地制品仓库中的项目私有依赖包不是用最新代码编译构建出的版本,最终导致项目构建失败或者也不符合安全规范信息的要求。同时,在进行项目构建前,如果未实时对第三方依赖包和项目私有依赖包进行安全扫描,可能导致项目编译构建后生成的制品(即程序包)存在安全隐患,最终导致制品不可用。
[0085]
因此,本实施例中会对获取的待扫描替换依赖包进行安全扫描,将扫描后符合安全规范信息的待扫描替换依赖包作为上述目标替换依赖包。其中,上述安全规范信息是预先设置的用于限定目标项目所对应的依赖包的安全条件的信息。
[0086]
进一步的,还可以根据依赖包管理信息对私有程序包存储库中存储的所有依赖包进行安全扫描,以保证用于构建目标项目的所有依赖包都是符合安全规范信息的。
[0087]
需要说明的是,如果安全扫描过程中发现不符合要求的依赖包,则可以提前进行预警,输出不符合要求的依赖包的名称或者重新获取对应的符合要求的依赖包(连接互联网下载或者重新生成),从而提高构建的项目的安全性,并且提高项目构建的成功率。
[0088]
进一步的,本实施例中,在上述通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包之后,上述方法还包括:将上述目标替换依赖包存储到上述私有程序包存储库中,并更新上述依赖包管理信息。同时,如果待更新依赖包是原先就存储在私有程序包存储库中但是版本不符合要求或更新时间不符合要求的依赖包,可以删除原来版本或更新时间不符合要求的依赖包,仅存储目标替换依赖包,从而减少对于存储空间的占用。
[0089]
步骤s400,根据上述目标替换依赖包构建上述目标项目。
[0090]
在一种应用场景中,在将目标替换依赖包存储到私有程序包存储库之后,可以更新配置文件中所需要的各个依赖包的存储位置,以方便调用正确的依赖包,从而进行目标项目的构建。
[0091]
由上可见,本实施例中,获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息;获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包;通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包,对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包;根据上述目标替换依赖包构建上述目标项目。
[0092]
与现有技术中直接从私有程序包存储库中获取依赖包来构建项目的方案相比,本实施例中会将配置文件中需要的依赖包的依赖包信息与依赖包管理信息进行对比确定待更新依赖包(即私有程序包存储库中缺失的依赖包和/或版本异常的依赖包),再通过依赖包下载和/或依赖包生成的方式获取待更新依赖包对应的待扫描替换依赖包并进行安全扫描。从而可以保障获取到构建项目所需要的所有依赖包并进行项目构建,避免私有程序包存储库中可能缺少项目所需的依赖包从而导致项目无法构建的问题出现,有利于提高项目构建的成功率。同时,进行安全扫描还有利于保障所获得的依赖包是符合安全规范的,可以
进一步提高项目构建的成功率。
[0093]
如图3中所示,对应于上述基于配置文件的项目构建方法,本发明实施例还提供一种基于配置文件的项目构建系统,上述基于配置文件的项目构建系统包括:
[0094]
配置解析模块510,用于获取用于构建目标项目的配置文件,从上述配置文件中提取获得依赖包信息,其中,上述依赖包信息包括上述配置文件对应的各依赖包的名称和版本信息。
[0095]
依赖包对比模块520,用于获取依赖包管理信息,将上述依赖包管理信息与上述依赖包信息进行对比并确定待更新依赖包,其中,上述依赖包管理信息包括私有程序包存储库中存储的各依赖包的名称和版本信息,上述待更新依赖包包括上述私有程序包存储库中缺失的依赖包和/或版本异常的依赖包。
[0096]
依赖包获取模块530,用于通过依赖包下载和/或依赖包生成的方式获取上述待更新依赖包对应的待扫描替换依赖包。
[0097]
安全扫描模块540,用于对上述待扫描替换依赖包进行安全扫描后获得目标替换依赖包。
[0098]
项目构建模块550,用于根据上述目标替换依赖包构建上述目标项目。
[0099]
图4是本发明实施例提供的一种基于配置文件的项目构建系统的具体结构示意图,如图4所示,上述依赖包获取模块530包括:
[0100]
依赖包类别确定单元531,用于将各上述待更新依赖包分别划分为第三方依赖包或项目私有依赖包。
[0101]
第三方包处理单元532,用于通过互联网下载获取各上述第三方依赖包对应的待扫描替换依赖包。
[0102]
项目私有包处理单元533,用于基于devops平台中对应的持续集成流水线生成各上述项目私有依赖包对应的待扫描替换依赖包。
[0103]
需要说明的是,上述基于配置文件的项目构建系统的各个模块的划分方式并不唯一。例如,在一种应用场景中,也可以直接由依赖包对比模块520直接区分第三方依赖包和项目私有依赖包,在依赖包获取模块530不需再设置依赖包类别确定单元531,在此不作具体限定。
[0104]
具体的,上述基于配置文件的项目构建系统及其各个模块、单元的具体功能及其实现方式可以参照上述基于配置文件的项目构建方法中的具体描述。
[0105]
本实施例中,上述基于配置文件的项目构建系统在进行目标项目构建时,读取目标项目中的配置文件,提取依赖包信息,与依赖包管理表中信息比对。对于新增的或版本有变更的第三方依赖包,可以通过互联网下载;对于新增的、版本有变更或构建时间有变更的项目私有依赖包,可以执行对应ci流水线生成;对获得的新的第三方依赖包和项目私有依赖包进行安全扫描,在安全扫描通过后存放到本地制品仓库保存,并同步更新依赖包管理表后,再触发项目对应的ci流水线,执行项目构建指令,完成项目构建。通过此系统,可以达到减少由于依赖包问题导致的项目构建失败的问题,有利于提高项目构建成功率,并提高项目最终制品的安全性。
[0106]
具体的,上述配置解析模块510可以用于从devops平台的代码仓库获取项目代码,获取用于构建目标项目的配置文件,从配置文件中提取依赖包信息,并把依赖包信息传递
给依赖包对比模块520。
[0107]
上述依赖包对比模块520可以用于接收依赖包信息,并获取依赖包管理信息,将两者进行对比以判断目标项目所需要的依赖包是否新增、依赖包的版本是否新增、依赖包是否与其它依赖包存在依赖关联关系。还可以用于判断各个依赖包是第三方依赖包还是项目私有依赖包,以及判断依赖包的更新时间是否是最新。其中,上述依赖包管理信息根据依赖包管理表获得,上述依赖包管理表用于记录devops平台的私有制品仓库(即私有程序包存储库)中存储的各种第三方依赖包和项目私有依赖包的名称、版本、依赖关系、是否私有、更新时间、存储位置等信息。
[0108]
进一步的,上述依赖包对比模块520还可以将新增的或版本有变更的第三方依赖包信息的传递给第三方包处理单元532,把新增的、版本有变更或构建时间有变更的项目私有依赖包的信息传递给项目私有包处理单元533。上述第三方包处理单元532连接互联网的依赖包仓库下载对应版本的第三方依赖包,并把下载的第三方依赖包(即待扫描替换依赖包)传递给安全扫描模块540。上述项目私有包处理单元533用于执行所需的项目私有依赖包在devops平台中对应的ci流水线生成项目私有依赖包制品,并把新构建的项目私有依赖包(即待扫描替换依赖包)传递给安全扫描模块540。
[0109]
上述安全扫描模块540对接收到的依赖包进行安全扫描,确保没有安全漏洞。需要说明的是,上述基于配置文件的项目构建系统还可以包括存储模块(图2中未示出),用于将扫描通过获得的目标替换依赖包存储到devops平台的私有制品仓库中保存,同时把符合安全规范的目标替换依赖包的信息更新到依赖包管理表中。
[0110]
本实施例中,还基于一种具体应用场景对上述基于配置文件的项目构建方法进行具体说明,图5是本发明实施例提供的一种获取目标替换依赖包的具体流程示意图,图6是本发明实施例提供的一种获取目标替换依赖包的步骤对应的处理逻辑示意图。如图5所示和图6所示,本实施例中读取需构建的目标项目中的配置文件,并提取其中的依赖包信息,将依赖包信息与依赖包管理表所对应的依赖包管理信息进行比对,确定待更新依赖包。
[0111]
当待更新依赖包是新增的或版本有变更的第三方依赖包时,通过互联网的依赖包仓库下载对应的待扫描替换依赖包。当待更新依赖包是新增的、版本有变更或构建时间有变更的项目私有依赖包时,执行对应ci流水线生成对应的待扫描替换依赖包。然后对待扫描替换依赖包进行安全漏洞扫描,获得没有安全漏洞的目标替换依赖包。并且可以将安全扫描通过之后的目标替换依赖包存放到本地制品仓库保存,更新依赖包管理表。
[0112]
需要说明的是,本实施例中基于devops平台进行项目构建,所使用的devops平台可以包括:
[0113]
需求管理模块,包括用于根据需求进行开发及后续追踪的工具;代码管理模块,主要包括存放和管理开发代码、开发版本的仓库集,一个代码仓库对应一个项目,例如可以包括gitlab等;流水线管理模块,主要用于配置和管理持续集成(ci,continuous integration)流水线/持续部署(cd,continuous deployment)流水线集,一个代码仓库对应一条或多条ci/cd流水线,对应工具可以包括jenkins等;制品管理模块,主要包括存放和管理依赖包、制品的本地依赖包仓库,对应工具如nexus、harbor、jfrog artifactory等。
[0114]
其中,上述ci流水线是在代码变更后自动检测、拉取、编译构建,最终生成可用于部署到环境的制品的过程;上述cd流水线是指能够将ci流水线生成的制品,自动提供持续
交付管道中发布版本给最终用户使用的过程。上述编译构建是指执行编译构建指令,读取代码中的配置文件,从本地依赖包仓库拉取第三方依赖包和项目私有依赖包,完成可用于部署制品生成。编译构建指令可以是java项目的mvn clean deploy,node.js项目的npm install等。本实施例中的配置文件可以是java项目maven工具的pom.xml、ant工具的build.xml、build.gradle配置文件或者javascript项目vue框架package.json配置文件等。上述第三方依赖包指不是由目标项目的项目组成员开发的依赖包,通常此类依赖包存放在互联网的依赖包仓库。上述项目私有依赖包指由目标项目的项目组成员开发的依赖包。互联网的依赖包仓库是指由其他用户、组织等在互联网上搭建的供开发者自由下载第三方依赖包的网站。
[0115]
本实施例中,在devops中的ci流水线执行前,对目标项目构建过程中需要使用的依赖包进行更新和安全扫描。
[0116]
在一种应用场景中,ci流水线包括的环节包括代码变更后自动检测、代码拉取和代码编译构建生成制品。在进行代码编译构建生成制品的过程中,可能因为依赖包的问题导致编译构建失败。本实施例中,为了提高编译成功率,可以在ci流水线前增加一个前置模块用于检查、更新和扫描依赖包,在扫描完成后,再触发ci流水线完成目标项目的编译构建,有理由解决由于依赖包的问题导致的编译构建失败,并保证了最后制品的安全性。
[0117]
具体的,本实施例中还基于一个具体应用场景对项目构建的过程进行具体说明,具体的,包括如下步骤:
[0118]
步骤一,获取需求任务,基于devops平台上需求管理模块获取需求任务并进行分析,要实现该需求的功能,需要完成两部分的代码开发,一部分为需求功能的代码开发,另一部分为项目私有依赖包的代码开发。
[0119]
步骤二,完成需求功能的代码开发,开发人员用高级程序语言在本地环境完成该需求功能的代码编写,高级程序语言包括但不限于java、javascript、node.js、ruby等。
[0120]
步骤三,完成项目私有依赖包的代码开发,开发人员用高级程序语言在本地环境完成项目私有依赖包的代码编写。针对需求不同,既可能是重新编写项目私有依赖包的代码,也可能在已有的项目私有依赖包的代码基础上做更新,在此不作具体限定。
[0121]
步骤四,提交需求功能的代码,提交需求功能代码到devops平台上代码管理模块中的代码仓库,如gitlab上的代码仓库a的develop分支上。
[0122]
步骤五,提交项目私有依赖包的代码,提交项目私有依赖包代码到devops平台上代码管理模块中的代码仓库,如gitlab上的代码仓库b的develop分支上。
[0123]
步骤六,读取需构建项目中的配置文件。例如,基于上述配置解析模块510对gitlab上项目的分支状态变化监控自动触发,从gitlab上的代码仓库a的develop分支上获取项目代码。
[0124]
步骤七,提取依赖包信息。例如,基于上述配置解析模块510从项目代码中获取用于构建指定项目的配置文件pom.xml,从配置文件中提取依赖包信息,并把依赖包信息传递给依赖包比对模块520。
[0125]
例如,maven工具的一个配置文件pom.xml可以如下所示:
[0126]
[0127][0128]
基于上述pom.xml文件可知,yuanxing-devops-test为项目编译构建后最终生成的jar包的名称,版本为:2.2.2-snapshot;xxl-job-admin为项目编译过程中需要的第三方依赖包jar包的名称,版本为:2.2.0-snapshot;vispractice-common为项目编译过程中需要的项目私有依赖包jar包的名称,版本为:2.2.1-snapshot。
[0129]
步骤八,对比依赖包管理表。例如,可以根据依赖包对比模块520对依赖包信息和依赖包管理信息进行对比。依赖包管理表,用于记录devops平台的所有私有制品仓库(如nexus、harbor、jfrog artifactory)中存储的各种第三方依赖包和项目私有依赖包的名称、版本、依赖关系、是否私有、更新时间、存储位置等信息。
[0130]
其中,进行信息对比时,判断依赖包是否新增、判断依赖包版本是否新增、判断依赖包是否与其他依赖包存在依赖关系、判断依赖包是第三方依赖包还是项目私有依赖包,以及,判断依赖包更新时间是否最新。
[0131]
判断依赖包是否新增是指对比配置文件中提取的依赖包名称是否在依赖包管理表的名称字段中存在;不存在的第三方依赖包需要在互联网拉取,不存在的项目私有依赖包需要执行devops平台对应ci流水线编译构建。
[0132]
判断依赖包版本是否新增是指对比配置文件中提取的依赖包版本是否在依赖包管理表的版本字段中存在;版本不存在的第三方依赖包需要在互联网拉取,版本不存在的项目私有依赖包需要执行devops平台对应ci流水线编译构建。
[0133]
判断依赖包是否与其他依赖包存在依赖关系是指判断依赖包管理表的依赖包是否依赖其他的依赖包,如果存在依赖关系则需要在依赖包管理表中添加该依赖包的依赖包,并通过外键或关系表的方式进行关联;后续从互联网的依赖包仓库下载时,需要把依赖包和依赖包的依赖包全部下载。
[0134]
判断依赖包是第三方依赖包还是项目私有依赖包时,项目私有依赖包在命名上做规范作为与其他第三方依赖包的区分。
[0135]
判断依赖包更新时间是否最新是指,针对项目私有依赖包,判断其代码在代码仓库最新一次提交的时间是否晚于依赖包生成的时间,如晚于,则证明依赖包不是用最新代码生成的最新版本,需重新执行ci流水线完成构建生成最新的依赖包。
[0136]
其中,依赖包管理表中的存储位置主要存放依赖包在本地私有制品仓库中的位置,如nexus工具的节点1。其作用在于,当依赖包只是版本或者时间不一致,需要更新时,优先在对应的节点下载,保证依赖包存储位置的连贯性;当依赖包是新增的时候,根据存储位置查询各个节点的存储空间,选择空间宽裕的节点进行存储,保证存储空间的合理利用。
[0137]
步骤九,新增的或版本有变更的第三方依赖包通过互联网下载对应的待扫描替换依赖包。具体的,devops平台上制品管理模块(如nexus)通过互联网代理方式,连接互联网的依赖包仓库下载对应版本的第三方依赖包。如果配置文件中需要的第三方依赖包还与其他的第三方依赖包存在依赖关系的,则需要把依赖包和依赖包的依赖包全部下载。如除下载第三方依赖包xxl-job-admin-2.2.0-snapshot.jar外,还需下载其依赖包xxl-job-core-2.2.0-snapshot.jar。
[0138]
步骤十,新增的或版本有变更或构建时间有变更的项目私有依赖包执行相应流水线生成对应的待扫描替换依赖包。执行项目私有依赖包在devops平台上流水线管理模块,对应gitlab上的代码仓库b的develop分支对应的ci流水线,生成项目私有依赖包制品。如果项目私有依赖包在编译构建时,也需要用到第三方依赖包或项目私有依赖包,则也需要先执行完成图5所示的步骤后再触发ci流水线完成项目私有依赖包的编译构建,生成最终的jar包制品。
[0139]
在具体实施例中,可通过项目私有依赖包的名称vispractice-common到devops平台上流水线管理模块中查找名字相同的ci流水线,即项目私有依赖包名称与ci流水线名称一一对应。
[0140]
步骤十一,对依赖包进行安全扫描,例如,可以使用owasp等工具进行安全扫描。在具体实施例中,对于在本地制品仓库中已存在的依赖包,也需要做安全扫描,以在安全规则更新时也保证依赖包满足其要求。
[0141]
步骤十二,安全扫描通过后存放到本地制品仓库保存,更新依赖包管理表。例如,可以根据上述基于配置文件的项目构建系统的存储模块对经过安全扫描通过后的第三方
依赖包和项目私有依赖包存入devops平台上制品管理模块(nexus)供其他项目构建时使用,具体存储位置信息更新依赖包管理表中的“存储位置”字段。并更新依赖包管理表中的依赖包信息,有新增依赖包的,则新增记录;有版本、依赖关系、时间发生变更的,则更新对应记录。在具体实施例中,已存在的依赖包在本地制品仓库只保存一份。
[0142]
步骤十三,触发代码仓库a的ci/cd流水线。具体的,通过上述基于配置文件的项目构建系统触发devops平台上流水线管理模块,对应gitlab上的代码仓库a的develop分支对应的ci流水线。从devops平台上代码管理模块,代码仓库gitlab下载完成需求功能的代码,并从制品管理模块,本地依赖包仓库nexus拉取依赖包,完成编译构建,生成可给cd流水线部署到测试环境或者生产环境的jar包制品。
[0143]
需要说明的是,执行步骤十三时,在本地依赖包仓库中已经存放好了gitlab上的代码仓库a的develop分支中的代码编译构建需要的所有依赖包,因此编译成功率高。如果编译失败,首先可排除依赖包问题,重点排查代码本身问题,也有利于更快的定位编译构建失败原因。
[0144]
需要说明的是,上述基于配置文件的项目构建系统中的依赖包更新操作除了在项目构建的时候触发流程完成依赖包的实时更新外,还可以在平时定期触发,即可以监控代码仓库中各个项目的代码分支状态变更,当发生变更则触发激活基于配置文件的项目构建系统中对应的功能,读取变更分支代码中的配置文件,提取依赖包信息,完成有新增或变更的依赖包的更新,并存储到本地制品仓库中,从而进一步提高ci流水线执行代码编译构建的成功率。
[0145]
由上可见,本实施例中,通过基于配置文件的项目构建系统优先完成了目标项目编译构建所需的依赖包的准备,在执行ci流水线时,项目编译构建时的依赖包只需要从本地依赖包仓库中下载即可,避免了由于网络不通、网络延时等原因,无法实时从互联网的依赖包仓库拉取第三方依赖包,最终导致项目编译构建失败的问题出现,提高了编译构建成功率,节省了编译构建的时间。同时,优先完成了项目编译构建所需的依赖包的准备,在执行ci流水线时,确保了项目编译构建时需要的项目私有依赖包是最新的版本,从而避免了由于项目私有依赖包非最新导致的项目编译构建失败的问题出现,提高了编译构建成功率。进一步的,在上述基于配置文件的项目构建系统中增加了依赖包管理表,有利于对项目私有制品库中物理分散存放在多工具多节点的依赖包信息做归一化管理,提高了查询效率。同时,上述基于配置文件的项目构建系统中还增加了安全扫描环节,避免了项目编译构建后生成的制品存在安全隐患的情况出现。
[0146]
基于上述实施例,本发明还提供了一种智能终端,其原理框图可以如图7所示。上述智能终端包括处理器及存储器。该智能终端的存储器包括基于配置文件的项目构建程序,存储器为基于配置文件的项目构建程序的运行提供环境。该基于配置文件的项目构建程序被处理器执行时实现上述任意一种基于配置文件的项目构建方法的步骤。需要说明的是,上述智能终端还可以包括其它功能模块或单元,在此不作具体限定。
[0147]
本领域技术人员可以理解,图7中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的智能终端的限定,具体地智能终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0148]
本发明实施例还提供一种计算机可读存储介质,上述计算机可读存储介质上存储
有基于配置文件的项目构建程序,上述基于配置文件的项目构建程序被处理器执行时实现本发明实施例提供的任意一种基于配置文件的项目构建方法的步骤。
[0149]
应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0150]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述系统的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0151]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0152]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟是以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0153]
上述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质可以包括:能够携带上述计算机程序代码的任何实体或系统、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。
[0154]
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不是相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1