一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种持续集成方法、装置以及计算机可读存储介质与流程

2022-07-16 11:23:36 来源:中国专利 TAG:


1.本技术涉及软件开发的技术领域,尤其是涉及一种持续集成方法、装置以及计算机可读存储介质。


背景技术:

2.在软件开发中,当需要对代码进行更新时,工程师会通过一次代码提交的动作将新更新的代码更新到总代码库中,一次代码提交中提交的代码通常由不同部分的修改代码组成。
3.任何代码的改动都可能导致整体代码质量的降低,并且进而引发严重事故。因此维护高质量、准确无误的代码库是非常重要且具有挑战的工作。持续集成(ci/continues integration)是软件工程中自动化开发代码的流程,只有可编译且通过所有测试的代码提交可以被合并到代码库中。一个常见的场景是工程师提交一个由多个代码修改所组成的代码提交至代码库,代码库执行持续集成步骤,对新的提交进行代码编译、测试、代码合并,在复杂装置下往往面临着效率低下,耗时等问题。


技术实现要素:

4.为此,本技术的实施例提供了一种持续集成方法、装置以及计算机可读存储介质,能够解决现有复杂装置在软件开发时,一次提交代码进行编译测试,代码集成效率低下的技术问题,具体技术方案内容如下:
5.第一方面,本技术的实施例提供一种持续集成方法,所述方法包括:
6.获取进行增量开发的更新代码;
7.获取更新代码的编译目标以及与所述更新代码的编译目标具有依赖关系的其他编译目标,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果;
8.在一次提交动作中,查询与所述更新代码的编译目标具有依赖关系的其他编译目标是否有发生修改;若否,则索引缓存中所有更新的编译目标以及对应的编译结果,合并到已有测试目标结果的缓存中;若有,则返回重新编译所述更新代码。
9.优选的,所述对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果包括:
10.检查编译目标是否有相应的编译结果;
11.如果有,使用相应的编译结果;
12.如果无,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果。
13.优选的,所述检查编译目标是否有相应的编译结果为:
14.通过对声明的编译目标的相关源文件的索引值进行索引的方式检查该编译目标是否有相应的编译结果。
15.优选的,所述编译结果包括缓存文件,所述缓存编译测试后的编译结果包括:
16.在一次编译测试中,对该编译测试过程中的每一步的数据分别缓存为缓存文件。
17.优选的,对于单个缓存文件,以整个缓存文件的内容作为索引,将缓存文件编译后生成的链接库作为索引值。
18.优选的,对于一次编译的所有缓存文件,以所有缓存文件的内容作为索引,将所有缓存文件的链接库链接后的可执行文件作为索引值。
19.优选的,所述方法还包括:
20.对当前的更新代码进行代码优化,所述代码优化包括静态检查以及动态检查。
21.优选的,所述方法还包括:
22.构建多叉树结构的审核人关系树,将代码根据模块划分为至少一个代码文件,审核人关系树每个节点对应一个代码文件,在审核人关系树的至少一个节点对应的目录存储有描述审核人的文件,审核人关系树中子节点继承父节点的审核人;
23.每次更新代码后,根据修改的代码文件所在节点向上递归查询,直至找到相应审核人。
24.第二方面,本技术的实施例提供一种持续集成装置,所述装置包括:
25.获取模块,用于获取进行增量开发的更新代码;
26.分步编译模块,用于获取更新代码的编译目标以及与所述更新代码的编译目标具有依赖关系的其他编译目标,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果;
27.索引模块,用于在一次提交动作中,查询与所述更新代码的编译目标具有依赖关系的其他编译目标是否有发生修改;若否,则索引缓存中所有更新的编译目标以及对应的编译结果,合并到已有测试目标结果的缓存中;若有,则返回重新编译所述更新代码。
28.第三方面,本技术的实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述任意一项所述的持续集成方法的步骤。
29.综上所述,与现有技术相比,本技术实施例提供的技术方案带来的有益效果至少包括:
30.1、通过在部分代码修改的同时进行编译测试,将集成任务进行拆分,将部分任务的编译测试提前到每次修改中,提前了流程的起始点,大幅度缩短了代码提交并合并至代码库的等待时间,提升了整体效率;
31.2、通过设置审核人关系树,细化审核节点的颗粒度,有审核人关系树可快速定位到被修改的代码文件的审核人,即使是跨模块开发,也可通过扫描节点,找到对应的审核人。
附图说明
32.图1是本技术其中一实施例提供的一种持续集成方法的流程示意图。
33.图2是本技术其中一实施例提供的一种持续集成装置的结构示意图。
具体实施方式
34.本具体实施例仅仅是对本技术的解释,其并不是对本技术的限制,本领域技术人
员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本技术的权利要求范围内都受到专利法的保护。
35.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
36.另外,本技术中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本技术中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
37.本技术中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
38.本技术中术语“至少一个”是指一个或多个,“多个”的含义是指三个或以上,例如,多个第一位置是指三个或以上的第一位置。
39.在代码开发后,需要对代码进行编译,编译即将代码翻译成计算机可以识别的二进制文件。在代码开发中,常用一次提交(commit)来提交多次修改的代码。在某一部分代码修改之后,需要等待其他部分的代码修改完成之后,再在一次提交中,对全部提交修改的代码进行编译测试,至少存在以下问题:
40.(1)代码修改后进行编译测试的等待时间较长;
41.(2)若是一次提交编译测试的部分代码在编译测试的过程中发生错误,会影响其他正确代码的提交;
42.(3)一次提交对所有更新的代码进行编译测试所需时间较长。
43.下面结合说明书附图对本技术实施例作进一步详细描述。
44.参照图1,在本技术的一个实施例中,提供一种持续集成方法,所述方法的主要步骤描述如下:
45.s1:获取进行增量开发的更新代码;
46.s2:获取更新代码的编译目标以及与所述更新代码的编译目标具有依赖关系的其他编译目标,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果;
47.s5:在一次提交动作中,查询与所述更新代码的编译目标具有依赖关系的其他编译目标是否有发生修改;若否,则索引缓存中所有更新的编译目标以及对应的编译结果,合并到已有测试目标结果的缓存中;若有,则返回重新编译所述更新代码。
48.具体的,在本实施例中,代码开发步骤包含了添加依赖外部依赖代码,实现代码,添加相应的单元测试等工作。工程师在代码开发的过程中采用增量开发的方式,每次修改只包含一部分代码逻辑的修改,即在每次的修改都满足可以编译测试的条件。
49.具体的,在本实施方式中,对每次修改的代码都进行编译测试,编译测试即编译以及测试相应的单元测试。编译测试得到的编译结果为编译后的二进制文件,测试结果为单元测试的结果,并缓存编译结果、测试结果。具体的,在本实施例中,缓存编译结果以及测试结果在服务器中,在本技术其他实施例中,可以缓存在其他具有存储功能的硬件设备中,在此不作赘述。
50.每次对更新代码进行编译测试时,将每个编译测试的对象都设置为提前声明好的编译目标以及该与更新代码可能存在依赖关系的其他编译目标,编译目标包含了源文件路径、依赖路径等元数据。
51.因为在软件开发过程中,会存在有不同的工程师对不同的功能模块进行了修改,所以在一次提交动作中,需要先查询当前工程师提交的更新代码依赖的编译目标是否被其他工程师更新了;若当前工程师提交的更新代码依赖的编译目标没有更新,查询此刻所有已更新代码的编译目标及编译结果进行代码集成,无需在一次提交时,对所提交的代码全部进行编译测试,进而提高整体效率;若当前工程师提交的更新代码依赖的编译目标有更新,则返回到当前工程师提交的更新代码的编译测试阶段,获取该更新代码具有依赖关系的所有编译目标,重新进行编译测试,缓存编译结果以及测试结果,再进行提交动作以及后续的查询步骤。此步骤的设置,可以减少出现在当前工程师完成编译测试,并缓存编译测试结果之后到提交之前的时间段内,有其他工程师对当前工程师的更新代码有依赖关系的其他编译目标进行修改,导致当前工程师提交的不是最新内容的情况。
52.本技术方案通过在部分代码修改的同时进行编译测试,将集成任务进行拆分,将部分任务的编译测试提前到每次修改中,提前了流程的起始点,大幅度缩短了代码提交并合并至代码库的等待时间,提升了整体效率。
53.可选的,在另一实施方式中,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果包括:
54.s21:检查编译目标是否有相应的编译结果;
55.s22:如果有,使用相应的编译结果;
56.s23:如果无,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果。
57.具体的,在代码编译中,存在有以下的可能需要重新编译:
58.1)不同的编译目标可能都依赖于某个基本的编译目标,则此编译目标需要被多次编译。
59.2)多次尝试编译的时候,对于同一个编译目标进行了多次的编译。
60.在本实施例中,预先声明了编译目标,在编译目标编译前,对所有编译目标的相关数据进行搜索,判断在服务器中是否已经存在已有编译输出;若有,则不需要对该编译目标进行编译测试,直接使用已有的编译结果。编译测试是及其耗时的操作,因此,在编译目标被编译测试前,匹配是否存在编译结果,如有,复用编译结果,可以极高的提升整体效率,减少资源浪费。
61.可选的,在另一实施方式中,编译结果包括缓存文件,所述缓存编译测试后的编译结果为:在一次编译测试中,对该编译测试过程中的每一步的数据分别缓存为缓存文件。
62.在实际应用中,编译测试过程分成了很多步,比如预处理,编译,链接等等。本技术实施方式中,将每一步的数据进行缓存,在编译目标被编译测试前,索引相关源文件时,可采用分层索引的方式,索引不同维度的数据以对应编译测试中的不同步骤,通过本技术实施方式的设置,可以做到只对修改的代码文件进行编译、测试,没有修改的部分复用之前的缓存文件,细分索引颗粒度,进而减少重复编译测试的内容,进一步提高了整体效率。
63.可选的,在另一实施方式中,对于单个缓存文件,以整个缓存文件的内容作为索
引,将缓存文件编译后生成的链接库作为索引值。
64.对于一次编译的所有缓存文件,以所有缓存文件的内容作为索引,将所有缓存文件的链接库链接后的可执行文件作为索引值。
65.通过本实施方式的设置,将链接库作和/或可执行文件为索引值,实现快速读取数据,减少排序和分组的时间。
66.可选的,在另一实施方式中,步骤s21为;通过对声明的编译目标的相关源文件进行索引的方式检查该编译目标是否有相应的编译结果。
67.通过索引源文件的方式,可以精准定位编译目标相关数据的位置,以达到精准查找的目的。
68.可选的,在另一实施方式中,所述方法还包括:
69.s3:对当前的更新代码进行代码优化,所述代码优化包括静态检查以及动态检查。
70.具体的,在本实施方式中,代码检查可以有效的提高代码质量,进一步的,代码检查不仅仅是为了提高代码质量,已深入到代码程序的逻辑检查、内存使用情况的检查甚至更高层面的检查,很大程度上影响了程序的功能和性能。
71.静态检查为对当前的代码修改,进行相应编程语言的语法分析,在不实际运行代码的情况下发现比较明显的代码错误,比如未使用的变量、不可达的代码以及不可移植的代码等,静态检查可以:1、帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷;2、帮助代码设计人员更专注于分析和解决代码设计缺陷;3、显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。在本实施方式中,进行静态检查的工具为cppcheck,在本技术的其他实施方式中,还可以为pc-lint、splint等,在此不作限定。
72.动态检查中代码将被运行,并且代码所占用的内存,地址等资源会被分析,以确保逻辑层面的运行正确。动态检查将检查出静态检查无法检测出的问题,比如内存泄漏、访问未初始化的内存、线程并发问题等;在本实施方式中,进行动态检查的工具可以为addresssanitizer、leaksanitizer、threadsanitizer、memorysanitizer等,在此不作限定。
73.可选的,在另一实施方式中,所述方法还包括:预先构建多叉树结构的审核人关系树,将代码根据模块划分为至少一个代码文件,审核人关系树每个节点对应一个代码文件,在审核人关系树的至少一个节点对应的目录存储有描述审核人的文件,审核人关系树中子节点继承父节点的审核人。
74.s4:每次更新代码后,根据修改的代码文件所在节点向上递归查询,直至找到相应审核人。
75.具体的,在大型软件开发的过程中,对代码的修改通常需要高级别的工程师进行审核。目前常见的流程中,将代码的不同模块手动配置相应的负责人,且在进行相应代码开发的时候,只在一个模块中进行开发,若是产生跨模块开发,这种方式会存在需要问题,比如说无法找到相应的负责人、模块划分不清晰、审核粒度不准确等问题,会极大的增加了沟通成本以及操作成本。
76.在本实施方式中,将审核人组织的架构进行抽象,即根据审核人的审核权限建立多叉树结构关系网,即审核人关系树。
77.在本实施例的一个例子中,在多叉树结构中,父节点的审核人包含子节点审核人的权限,归属于不同父节点的子节点的审核权限可以不相同,在多叉树结构中,对应一个审核人的节点可以存在多个子节点。具体的实现方式为,审核人关系树中,每一个节点对应一个代码文件,在审核人关系树的某些节点对应的目录中存储有描述审核人的文件,且审核人关系树中子节点继承父节点的审核人。
78.当审核人关系树上某个节点的代码文件发生修改,根据修改的代码文件所在节点向上递归查询,若该节点对应的目录中存储有描述审核人的文件,则通知对应的审核人;若当前节点对应的目录中没有描述审核人的文件,则由查询该节点的父节点,直至查询到存在描述审核人的文件为止,通知对应的审核人。
79.若是跨模块开发,则可以通过自动化扫描修改的代码文件对应的节点,为不同模块的修改找到相应的审核人,自动化通知审核人进行审核。
80.进一步的,在本实施方式中,可能存在有查询到的审核人没有及时审核修改的代码文件的情况,此时可以继续沿审核人关系树向上递归查询,查找上一级审核人审核。
81.进一步的,在本实施方式中,s2、s3、s4为并列步骤,只有s2、s3、s4均执行完成才进行步骤s5。
82.具体的,在一次提交动作发生前,对需要一次提交集成的更新代码检查是否存在缓存结果、是否经过静态检查以及动态检查以及是否找到审核人审核进行判断,只有通过此三个步骤之后更新代码才可一次提交集成与代码库,以确保更新代码的准确性、安全性。
83.应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
84.参照图2,在本技术的一个实施例中,提供一种持续集成装置,该持续集成装置与上述实施例中的持续集成方法一一对应。该持续集成装置包括:
85.获取模块,用于获取进行增量开发的更新代码;
86.分步编译模块,用于获取更新代码的编译目标以及与所述更新代码的编译目标具有依赖关系的其他编译目标,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果;
87.索引模块,用于在一次提交动作中,查询与所述更新代码的编译目标具有依赖关系的其他编译目标是否有发生修改;若否,则索引缓存中所有更新的编译目标以及对应的编译结果,合并到已有测试目标结果的缓存中;若有,则返回重新编译所述更新代码。
88.进一步的,在另一实施方式中,所述对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果包括:
89.检查编译目标是否有相应的编译结果;
90.如果有,使用相应的编译结果;
91.如果无,对获取的编译目标进行编译测试,缓存编译测试后的编译结果和测试结果。
92.进一步的,在另一实施方式中,所述编译结果包括缓存文件,所述缓存编译测试后的编译结果包括:
93.在一次编译测试中,对该编译测试过程中的每一步的数据分别缓存为缓存文件。
94.进一步的,在另一实施方式中,对于单个缓存文件,以整个缓存文件的内容作为索引,将缓存文件编译后生成的链接库作为索引值。
95.进一步的,在另一实施方式中,对于一次编译的所有缓存文件,以所有缓存文件的内容作为索引,将所有缓存文件的链接库链接后的可执行文件作为索引值。
96.进一步的,在另一实施方式中,所述检查编译目标是否有相应的编译结果为:
97.通过对声明的编译目标的相关源文件的索引值进行索引的方式检查该编译目标是否有相应的编译结果。
98.进一步的,在另一实施方式中,所述装置还包括:
99.检查模块,用于对当前的更新代码进行代码优化,所述代码优化包括静态检查以及动态检查。
100.进一步的,在另一实施方式中,所述装置还包括:
101.审核人关系构建模块,用于构建多叉树结构的审核人关系树,将代码根据模块划分为至少一个代码文件,审核人关系树每个节点对应一个代码文件,在审核人关系树的至少一个节点对应的目录存储有描述审核人的文件,审核人关系树中子节点继承父节点的审核人;
102.查询模块,用于每次更新代码后,根据修改的代码文件所在节点向上递归查询,直至找到相应审核人。
103.上述的持续集成装置各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
104.在本技术实施例的一个实施例中,提供一种计算机设备,该计算机设备可以是服务器。该计算机设备包括通过装置总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,易失性或非易失性存储设备包括但不限于:磁盘,光盘,eeprom(electrically-erasable programmable read only memory,电可擦除可编程只读存储器),eprom(erasable programmable read only memory,可擦除可编程只读存储器),sram(static random access memory,静态随时存取存储器),rom(read-only memory,只读存储器),磁存储器,快闪存储器,prom(programmable read-only memory,可编程只读存储器)。该计算机设备的存储器为存储于其内部的操作装置和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时实现上述实施例所述的持续集成方法步骤。
105.在本技术的一个实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例所述的持续集成方法步骤。所述计算机可读存储介质包括rom(read-only memory,只读存储器)、ram(random-access memory,随机存取存储器)、cd-rom(compact disc read-only memory,只读光盘)、磁盘、软盘等。
106.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将本技术所述装置的内部结构划分成不同的功能单元或模块,以完
成以上描述的全部或者部分功能。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献