一种代码集成编译中问题定位的方法及装置与流程

文档序号:12271014阅读:183来源:国知局
一种代码集成编译中问题定位的方法及装置与流程

本发明涉及代码持续集成技术领域,更具体地说,涉及一种代码集成编译中问题定位的方法及装置。



背景技术:

在代码持续集成技术领域的团队日常开发工作中,通常是由每个负责人研发各自负责的部分代码,然后再由编译人员将各个负责人提交的其研发的部分代码集成到一起,进行整体编译。

但是,在进行整体编译的过程中,可能会由于某个负责人研发的部分代码出现错误最终导致编译失败,现有技术中在出现这种编译失败的情况时,通常需要对每个负责人提交的部分代码一一进行编译,最终确定出出现问题的代码及对应负责人,但是这种方式由于需要对每个负责人提交的部分代码进行一一编译,所以问题定位的速度较慢。

综上所述,现有技术中存在当对各个负责人提交的代码部分进行整体编译且编译失败时,定位到问题代码的速度较慢的问题。



技术实现要素:

本发明的目的是提供一种代码集成编译中问题定位的方法及装置,以解决现有技术中存在的当对各个负责人提交的代码部分进行整体编译且编译失败时,定位到问题代码的速度较慢的问题。

为了实现上述目的,本发明提供如下技术方案:

一种代码集成编译中问题定位的方法,包括:

步骤1:将待编译的n个代码段集成为n个代码版本,第k个代码版本包括第1个代码段至第k个代码段,1≤k≤n;若第1个代码版本编译成功且第n个代码版本编译失败,则按照预设平分原则选取位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本;

步骤2:对当前代码版本进行编译,若编译成功,则按照预设平分原则选取位于当前代码版本及最后一次编译失败的代码版本中间的代码版本作为当前代码版本,执行步骤3;若编译失败,则按照预设平分原则选取位于最后一次编译成功的代码版本及当前代码版本中间的代码版本作为当前代码版本,执行步骤3;直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段,第m个代码版本为编译成功的代码版本中最接近第n个代码版本的代码版本,1≤m≤n;

步骤3:返回执行步骤2。

优选的,还包括:

预先设置执行时间间隔,并在每经过所述执行时间间隔后则执行步骤1至步骤3。

优选的,还包括:

若对第n个代码版本进行编译成功,则对所述第n个代码版本包含的全部代码段进行打包并发布。

优选的,确定出所述问题代码段之后,还包括:

基于提交所述问题代码段的ID确定出对应的负责人,并发送代码错误信息至所述负责人,以指示所述负责人对所述问题代码段进行修改。

一种代码集成编译中问题定位的装置,包括:

代码集成模块,用于:将待编译的n个代码段集成为n个代码版本,其中,第k个代码版本包括第1个代码段至第k个代码段,1≤k≤n;

代码编译模块,用于:若第1个代码版本编译成功且第n个代码版本编译失败,则按照预设平分原则选取位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本;对当前代码版本进行编译,若编译成功,则按照预设平分原则选取位于当前代码版本及最近一次编译失败的代码版本中间的代码版本作为当前代码版本,返回执行对当前代码版本进行编译的步骤;若编译失败,则按照预设平分原则选取位于最近一次编译成功的代码版本及当前代码版本中间的代码版本作为当前代码版本,返回执行对当前代码版本进行编译的步骤;直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段,第m个代码版本为编译成功的代码版本中最接近第n个代码版本的代码版本,1≤m≤n。

优选的,还包括:

定时模块,用于预先设置执行时间间隔,并在每经过所述执行时间间隔后则指示所述代码集成模块及所述代码编译模块进行工作。

优选的,还包括:

打包发布模块,用于若对第n个代码版本进行编译成功,则对所述第n个代码版本包含的全部代码段进行打包并发布。

优选的,还包括:

通知模块,用于确定出所述问题代码段之后,基于提交所述问题代码段的ID确定出对应的负责人,并发送代码错误信息至所述负责人,以指示所述负责人对所述问题代码段进行修改。

本发明提供了一种代码集成编译中问题定位的方法及装置,其中该方法包括:步骤1:将待编译的n个代码段集成为n个代码版本,第k个代码版本包括第1个代码段至第k个代码段,1≤k≤n;若第1个代码版本编译成功且第n个代码版本编译失败,则按照预设平分原则选取位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本;步骤2:对当前代码版本进行编译,若编译成功,则按照预设平分原则选取位于当前代码版本及最后一次编译失败的代码版本中间的代码版本作为当前代码版本,执行步骤3;若编译失败,则按照预设平分原则选取位于最后一次编译成功的代码版本及当前代码版本中间的代码版本作为当前代码版本,执行步骤3;直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段,第m个代码版本为编译成功的代码版本中最接近第n个代码版本的代码版本,1≤m≤n;步骤3:返回执行步骤2。本发明实施例提供的技术方案,当第1个代码版本编译成功且第n个代码版本编译失败时,按照预设平分原则选取出位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本进行编译,并基于该当前代码版本的编译成功与否,在当前代码版本及最后一次编译失败的代码版本或者最后一次编译成功的代码版本及当前代码版本之间按照预设平分原则选取出当前代码版本进行编译,直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段;由此,无需像现有技术中一样对每个代码段一一进行编译,从而减少了编译次数,大大加快了定位问题代码段的速度,进而提高了代码集成编译效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种代码集成编译中问题定位的方法的流程图;

图2为本发明实施例提供的一种代码集成编译中问题定位的方法中具体实现方案的示意图;

图3为本发明实施例提供的一种代码集成编译中问题定位的装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,其示出了本发明实施例提供的一种代码集成编译中问题定位的方法的流程图,可以包括以下步骤:

S11:将待编译的n个代码段集成为n个代码版本,第k个代码版本包括第1个代码段至第k个代码段,1≤k≤n;若第1个代码版本编译成功且第n个代码版本编译失败,则按照预设平分原则选取位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本。

其中,待编译的n个代码段即为各个负责人研发并提交的代码段,而对于n个代码段的排序可以按照其提交的时间先后顺序进行排列,也可以是按照预先设置的不同代码段的功能及结构进行排列,当然还可以根据实际需要进行其他设定,均在本发明的保护范围之内,在此不做具体限定。

第k个代码版本包括第1个代码段至第k个代码段,也即第k个代码版本不仅包括第k个代码段,而且包括编号小于k的任何一个代码段,其中编号即为1至n这些数字,且本申请中涉及到的数字,包括n、k等均为正整数。可见,第n个代码版本包括有全部代码段,因此,对第n个代码版本进行编译成功,则说明这n个代码段均正确,否则,则说明这n个代码段中必定有出现错误的问题代码段。

S12:对当前代码版本进行编译,若编译成功,则按照预设平分原则选取位于当前代码版本及最后一次编译失败的代码版本中间的代码版本作为当前代码版本,执行步骤3;若编译失败,则按照预设平分原则选取位于最后一次编译成功的代码版本及当前代码版本中间的代码版本作为当前代码版本,执行步骤3;直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段,第m个代码版本为编译成功的代码版本中最接近第n个代码版本的代码版本,1≤m≤n。

其中,预设平分原则可以根据需要进行设定,以选取第j个代码版本及第i个代码版本中间的代码版本为例进行说明,当(i-j)为奇数时,可以选取第(i+j)/2-0.5个代码版本,也可以选取第(i+j)/2+0.5个代码版本,当(i-j)为偶数时,可以选取第(i+j)/2个代码版本,其中,i和j均大于或者等于1且小于或者等于n,同时i大于j;当然还可以根据实际需要进行其他设定,均在本发明的保护范围之内。

另外,第m个代码版本为编译成功的代码版本中最接近第n个代码版本的代码版本,即第m个代码版本中的m为编译成功的代码版本中与n相差最少的编号。对于当前代码版本来说,最后一次编译成功的代码版本即为在选取出当前代码版本之前距离选取出当前代码版本的时间最近的一次成功编译所对应编译的代码版本,对应的,最后一次编译失败的代码版本即为在选取出当前代码版本之间距离选取出当前代码版本的时间最近的一次失败编译所对应编译的代码版本。

S13:返回执行步骤S12。

本发明实施例提供的技术方案,当第1个代码版本编译成功且第n个代码版本编译失败时,按照预设平分原则选取出位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本进行编译,并基于该当前代码版本的编译成功与否,在当前代码版本及最后一次编译失败的代码版本或者最后一次编译成功的代码版本及当前代码版本之间按照预设平分原则选取出当前代码版本进行编译,直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段;由此,无需像现有技术中一样对每个代码段一一进行编译,从而减少了编译次数,大大加快了定位问题代码段的速度,进而提高了代码集成编译效率。

另外,本发明实施例提供的上述技术方案可以通过对应的简单脚本实现,即只需在编译服务器上部署脚本即可,部署简单,免安装;且成本低,无需重新搭建CI环境,只需使用原有的编译服务器即可。

本发明实施例提供的一种代码集成编译中问题定位的方法,还可以包括:

预先设置执行时间间隔,并在每经过执行时间间隔后则执行步骤S11至步骤S13。

其中,执行时间间隔可以根据实际需要进行设置,如可以设置为一天,每天同一时间为当天提交的代码段形成的代码版本执行步骤S11至步骤S13的编译工作,从而保证了代码的持续集成。当上述步骤为利用脚本实现时,则为每经过预设时间段则执行该脚本,当然,在每次执行该脚本的过程中除了执行步骤S11和步骤S13之外还可以执行本发明公开的以下实施例中涉及的任何步骤。

本发明实施例提供的一种代码集成编译中问题定位的方法,还可以包括:

若对第n个代码版本进行编译成功,则对第n个代码版本包含的全部代码段进行打包并发布。

当对第n个代码版本进行编译成功后,说明全部代码段均为正确的代码段,此时可以按照对代码的常规做法对其进行打包并发布,以供保存或者使用。

本发明实施例提供的一种代码集成编译中问题定位的方法,确定出问题代码段之后,还可以包括:

基于提交问题代码段的ID确定出对应的负责人,并发送代码错误信息至负责人,以指示负责人对问题代码段进行修改。

每个负责人均可以通过对应的终端实现代码段的提交,而每个终端均具有对应的ID,因此,通过该ID可以确定出利用该ID对应的终端提交代码段的负责人,进而将代码错误信息发送至该负责人,以告知负责人其研发的代码段存在问题需要其进行修改,从而便于负责人及时获知自身研发的代码段的实际情况。

另外需要说明的是,本发明实施例中涉及的第一个代码版本还可以为已经确定正确的代码版本,此时如图2所示,假设共包括7个代码版本,即commit1至commit7,且commit1为上一次编译成功的代码版本,则对commit7进行编译,若commit7编译成功,说明commit2至commit6都没有问题,则打包发布commit7;若commit7编译失败,则执行以下步骤:

1、从commit1和commit7之间进行平分,代码回退到commit4进行编译;

2、若commit4编译成功,则从commit4和commit7之间进行平分,代码退回到commit5或者commit6进行编译,以此类推,直到找到编译成功的最新代码版本;

3、若commit4编译失败,则从commit4和commit1之间进行平分,代码退回到commit2或者commit3进行编译,以此类推,直到找到编译成功的最新代码版本;

所有编译完成后可查看编译结果,最新编译成功的版本就为最新版本,距离最新编译成功最近的一次编译失败则是导致问题的提交,即可通过提交ID确定责任人,通知责任人修改问题。

本发明实施例还提供了一种代码集成编译中问题定位的装置,如图3所示,可以包括:

代码集成模块11,用于:将待编译的n个代码段集成为n个代码版本,其中,第k个代码版本包括第1个代码段至第k个代码段,1≤k≤n;

代码编译模块12,用于:若第1个代码版本编译成功且第n个代码版本编译失败,则按照预设平分原则选取位于第1个代码版本及第n个代码版本中间的代码版本作为当前代码版本;对当前代码版本进行编译,若编译成功,则按照预设平分原则选取位于当前代码版本及最近一次编译失败的代码版本中间的代码版本作为当前代码版本,返回执行对当前代码版本进行编译的步骤;若编译失败,则按照预设平分原则选取位于最近一次编译成功的代码版本及当前代码版本中间的代码版本作为当前代码版本,返回执行对当前代码版本进行编译的步骤;直至第m个代码版本编译成功,则确定第m+1个代码段为问题代码段,或者直至选取出的最后一个当前代码版本编译失败,则确定第2个代码段为问题代码段,第m个代码版本为编译成功的代码版本中最接近第n个代码版本的代码版本,1≤m≤n。。

本发明实施例提供的一种代码集成编译中问题定位的装置,还可以包括:

定时模块,用于预先设置执行时间间隔,并在每经过执行时间间隔后则指示代码集成模块及代码编译模块进行工作。

本发明实施例提供的一种代码集成编译中问题定位的装置,还可以包括:

打包发布模块,用于若对第n个代码版本进行编译成功,则对第n个代码版本包含的全部代码段进行打包并发布。

本发明实施例提供的一种代码集成编译中问题定位的装置,还可以包括:

通知模块,用于确定出问题代码段之后,基于提交问题代码段的ID确定出对应的负责人,并发送代码错误信息至负责人,以指示负责人对问题代码段进行修改。

本发明实施例提供的一种代码集成编译中问题定位的装置中相关部分的说明请参见本发明实施例提供的一种代码集成编译中问题定位的方法中对应部分的详细说明,在此不再赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1