本發(fā)明涉及代碼持續(xù)集成技術(shù)領(lǐng)域,更具體地說,涉及一種代碼集成編譯中問題定位的方法及裝置。
背景技術(shù):
在代碼持續(xù)集成技術(shù)領(lǐng)域的團隊日常開發(fā)工作中,通常是由每個負責(zé)人研發(fā)各自負責(zé)的部分代碼,然后再由編譯人員將各個負責(zé)人提交的其研發(fā)的部分代碼集成到一起,進行整體編譯。
但是,在進行整體編譯的過程中,可能會由于某個負責(zé)人研發(fā)的部分代碼出現(xiàn)錯誤最終導(dǎo)致編譯失敗,現(xiàn)有技術(shù)中在出現(xiàn)這種編譯失敗的情況時,通常需要對每個負責(zé)人提交的部分代碼一一進行編譯,最終確定出出現(xiàn)問題的代碼及對應(yīng)負責(zé)人,但是這種方式由于需要對每個負責(zé)人提交的部分代碼進行一一編譯,所以問題定位的速度較慢。
綜上所述,現(xiàn)有技術(shù)中存在當(dāng)對各個負責(zé)人提交的代碼部分進行整體編譯且編譯失敗時,定位到問題代碼的速度較慢的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種代碼集成編譯中問題定位的方法及裝置,以解決現(xiàn)有技術(shù)中存在的當(dāng)對各個負責(zé)人提交的代碼部分進行整體編譯且編譯失敗時,定位到問題代碼的速度較慢的問題。
為了實現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種代碼集成編譯中問題定位的方法,包括:
步驟1:將待編譯的n個代碼段集成為n個代碼版本,第k個代碼版本包括第1個代碼段至第k個代碼段,1≤k≤n;若第1個代碼版本編譯成功且第n個代碼版本編譯失敗,則按照預(yù)設(shè)平分原則選取位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本;
步驟2:對當(dāng)前代碼版本進行編譯,若編譯成功,則按照預(yù)設(shè)平分原則選取位于當(dāng)前代碼版本及最后一次編譯失敗的代碼版本中間的代碼版本作為當(dāng)前代碼版本,執(zhí)行步驟3;若編譯失敗,則按照預(yù)設(shè)平分原則選取位于最后一次編譯成功的代碼版本及當(dāng)前代碼版本中間的代碼版本作為當(dāng)前代碼版本,執(zhí)行步驟3;直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段,第m個代碼版本為編譯成功的代碼版本中最接近第n個代碼版本的代碼版本,1≤m≤n;
步驟3:返回執(zhí)行步驟2。
優(yōu)選的,還包括:
預(yù)先設(shè)置執(zhí)行時間間隔,并在每經(jīng)過所述執(zhí)行時間間隔后則執(zhí)行步驟1至步驟3。
優(yōu)選的,還包括:
若對第n個代碼版本進行編譯成功,則對所述第n個代碼版本包含的全部代碼段進行打包并發(fā)布。
優(yōu)選的,確定出所述問題代碼段之后,還包括:
基于提交所述問題代碼段的ID確定出對應(yīng)的負責(zé)人,并發(fā)送代碼錯誤信息至所述負責(zé)人,以指示所述負責(zé)人對所述問題代碼段進行修改。
一種代碼集成編譯中問題定位的裝置,包括:
代碼集成模塊,用于:將待編譯的n個代碼段集成為n個代碼版本,其中,第k個代碼版本包括第1個代碼段至第k個代碼段,1≤k≤n;
代碼編譯模塊,用于:若第1個代碼版本編譯成功且第n個代碼版本編譯失敗,則按照預(yù)設(shè)平分原則選取位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本;對當(dāng)前代碼版本進行編譯,若編譯成功,則按照預(yù)設(shè)平分原則選取位于當(dāng)前代碼版本及最近一次編譯失敗的代碼版本中間的代碼版本作為當(dāng)前代碼版本,返回執(zhí)行對當(dāng)前代碼版本進行編譯的步驟;若編譯失敗,則按照預(yù)設(shè)平分原則選取位于最近一次編譯成功的代碼版本及當(dāng)前代碼版本中間的代碼版本作為當(dāng)前代碼版本,返回執(zhí)行對當(dāng)前代碼版本進行編譯的步驟;直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段,第m個代碼版本為編譯成功的代碼版本中最接近第n個代碼版本的代碼版本,1≤m≤n。
優(yōu)選的,還包括:
定時模塊,用于預(yù)先設(shè)置執(zhí)行時間間隔,并在每經(jīng)過所述執(zhí)行時間間隔后則指示所述代碼集成模塊及所述代碼編譯模塊進行工作。
優(yōu)選的,還包括:
打包發(fā)布模塊,用于若對第n個代碼版本進行編譯成功,則對所述第n個代碼版本包含的全部代碼段進行打包并發(fā)布。
優(yōu)選的,還包括:
通知模塊,用于確定出所述問題代碼段之后,基于提交所述問題代碼段的ID確定出對應(yīng)的負責(zé)人,并發(fā)送代碼錯誤信息至所述負責(zé)人,以指示所述負責(zé)人對所述問題代碼段進行修改。
本發(fā)明提供了一種代碼集成編譯中問題定位的方法及裝置,其中該方法包括:步驟1:將待編譯的n個代碼段集成為n個代碼版本,第k個代碼版本包括第1個代碼段至第k個代碼段,1≤k≤n;若第1個代碼版本編譯成功且第n個代碼版本編譯失敗,則按照預(yù)設(shè)平分原則選取位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本;步驟2:對當(dāng)前代碼版本進行編譯,若編譯成功,則按照預(yù)設(shè)平分原則選取位于當(dāng)前代碼版本及最后一次編譯失敗的代碼版本中間的代碼版本作為當(dāng)前代碼版本,執(zhí)行步驟3;若編譯失敗,則按照預(yù)設(shè)平分原則選取位于最后一次編譯成功的代碼版本及當(dāng)前代碼版本中間的代碼版本作為當(dāng)前代碼版本,執(zhí)行步驟3;直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段,第m個代碼版本為編譯成功的代碼版本中最接近第n個代碼版本的代碼版本,1≤m≤n;步驟3:返回執(zhí)行步驟2。本發(fā)明實施例提供的技術(shù)方案,當(dāng)?shù)?個代碼版本編譯成功且第n個代碼版本編譯失敗時,按照預(yù)設(shè)平分原則選取出位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本進行編譯,并基于該當(dāng)前代碼版本的編譯成功與否,在當(dāng)前代碼版本及最后一次編譯失敗的代碼版本或者最后一次編譯成功的代碼版本及當(dāng)前代碼版本之間按照預(yù)設(shè)平分原則選取出當(dāng)前代碼版本進行編譯,直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段;由此,無需像現(xiàn)有技術(shù)中一樣對每個代碼段一一進行編譯,從而減少了編譯次數(shù),大大加快了定位問題代碼段的速度,進而提高了代碼集成編譯效率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法的流程圖;
圖2為本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法中具體實現(xiàn)方案的示意圖;
圖3為本發(fā)明實施例提供的一種代碼集成編譯中問題定位的裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參閱圖1,其示出了本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法的流程圖,可以包括以下步驟:
S11:將待編譯的n個代碼段集成為n個代碼版本,第k個代碼版本包括第1個代碼段至第k個代碼段,1≤k≤n;若第1個代碼版本編譯成功且第n個代碼版本編譯失敗,則按照預(yù)設(shè)平分原則選取位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本。
其中,待編譯的n個代碼段即為各個負責(zé)人研發(fā)并提交的代碼段,而對于n個代碼段的排序可以按照其提交的時間先后順序進行排列,也可以是按照預(yù)先設(shè)置的不同代碼段的功能及結(jié)構(gòu)進行排列,當(dāng)然還可以根據(jù)實際需要進行其他設(shè)定,均在本發(fā)明的保護范圍之內(nèi),在此不做具體限定。
第k個代碼版本包括第1個代碼段至第k個代碼段,也即第k個代碼版本不僅包括第k個代碼段,而且包括編號小于k的任何一個代碼段,其中編號即為1至n這些數(shù)字,且本申請中涉及到的數(shù)字,包括n、k等均為正整數(shù)。可見,第n個代碼版本包括有全部代碼段,因此,對第n個代碼版本進行編譯成功,則說明這n個代碼段均正確,否則,則說明這n個代碼段中必定有出現(xiàn)錯誤的問題代碼段。
S12:對當(dāng)前代碼版本進行編譯,若編譯成功,則按照預(yù)設(shè)平分原則選取位于當(dāng)前代碼版本及最后一次編譯失敗的代碼版本中間的代碼版本作為當(dāng)前代碼版本,執(zhí)行步驟3;若編譯失敗,則按照預(yù)設(shè)平分原則選取位于最后一次編譯成功的代碼版本及當(dāng)前代碼版本中間的代碼版本作為當(dāng)前代碼版本,執(zhí)行步驟3;直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段,第m個代碼版本為編譯成功的代碼版本中最接近第n個代碼版本的代碼版本,1≤m≤n。
其中,預(yù)設(shè)平分原則可以根據(jù)需要進行設(shè)定,以選取第j個代碼版本及第i個代碼版本中間的代碼版本為例進行說明,當(dāng)(i-j)為奇數(shù)時,可以選取第(i+j)/2-0.5個代碼版本,也可以選取第(i+j)/2+0.5個代碼版本,當(dāng)(i-j)為偶數(shù)時,可以選取第(i+j)/2個代碼版本,其中,i和j均大于或者等于1且小于或者等于n,同時i大于j;當(dāng)然還可以根據(jù)實際需要進行其他設(shè)定,均在本發(fā)明的保護范圍之內(nèi)。
另外,第m個代碼版本為編譯成功的代碼版本中最接近第n個代碼版本的代碼版本,即第m個代碼版本中的m為編譯成功的代碼版本中與n相差最少的編號。對于當(dāng)前代碼版本來說,最后一次編譯成功的代碼版本即為在選取出當(dāng)前代碼版本之前距離選取出當(dāng)前代碼版本的時間最近的一次成功編譯所對應(yīng)編譯的代碼版本,對應(yīng)的,最后一次編譯失敗的代碼版本即為在選取出當(dāng)前代碼版本之間距離選取出當(dāng)前代碼版本的時間最近的一次失敗編譯所對應(yīng)編譯的代碼版本。
S13:返回執(zhí)行步驟S12。
本發(fā)明實施例提供的技術(shù)方案,當(dāng)?shù)?個代碼版本編譯成功且第n個代碼版本編譯失敗時,按照預(yù)設(shè)平分原則選取出位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本進行編譯,并基于該當(dāng)前代碼版本的編譯成功與否,在當(dāng)前代碼版本及最后一次編譯失敗的代碼版本或者最后一次編譯成功的代碼版本及當(dāng)前代碼版本之間按照預(yù)設(shè)平分原則選取出當(dāng)前代碼版本進行編譯,直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段;由此,無需像現(xiàn)有技術(shù)中一樣對每個代碼段一一進行編譯,從而減少了編譯次數(shù),大大加快了定位問題代碼段的速度,進而提高了代碼集成編譯效率。
另外,本發(fā)明實施例提供的上述技術(shù)方案可以通過對應(yīng)的簡單腳本實現(xiàn),即只需在編譯服務(wù)器上部署腳本即可,部署簡單,免安裝;且成本低,無需重新搭建CI環(huán)境,只需使用原有的編譯服務(wù)器即可。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法,還可以包括:
預(yù)先設(shè)置執(zhí)行時間間隔,并在每經(jīng)過執(zhí)行時間間隔后則執(zhí)行步驟S11至步驟S13。
其中,執(zhí)行時間間隔可以根據(jù)實際需要進行設(shè)置,如可以設(shè)置為一天,每天同一時間為當(dāng)天提交的代碼段形成的代碼版本執(zhí)行步驟S11至步驟S13的編譯工作,從而保證了代碼的持續(xù)集成。當(dāng)上述步驟為利用腳本實現(xiàn)時,則為每經(jīng)過預(yù)設(shè)時間段則執(zhí)行該腳本,當(dāng)然,在每次執(zhí)行該腳本的過程中除了執(zhí)行步驟S11和步驟S13之外還可以執(zhí)行本發(fā)明公開的以下實施例中涉及的任何步驟。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法,還可以包括:
若對第n個代碼版本進行編譯成功,則對第n個代碼版本包含的全部代碼段進行打包并發(fā)布。
當(dāng)對第n個代碼版本進行編譯成功后,說明全部代碼段均為正確的代碼段,此時可以按照對代碼的常規(guī)做法對其進行打包并發(fā)布,以供保存或者使用。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法,確定出問題代碼段之后,還可以包括:
基于提交問題代碼段的ID確定出對應(yīng)的負責(zé)人,并發(fā)送代碼錯誤信息至負責(zé)人,以指示負責(zé)人對問題代碼段進行修改。
每個負責(zé)人均可以通過對應(yīng)的終端實現(xiàn)代碼段的提交,而每個終端均具有對應(yīng)的ID,因此,通過該ID可以確定出利用該ID對應(yīng)的終端提交代碼段的負責(zé)人,進而將代碼錯誤信息發(fā)送至該負責(zé)人,以告知負責(zé)人其研發(fā)的代碼段存在問題需要其進行修改,從而便于負責(zé)人及時獲知自身研發(fā)的代碼段的實際情況。
另外需要說明的是,本發(fā)明實施例中涉及的第一個代碼版本還可以為已經(jīng)確定正確的代碼版本,此時如圖2所示,假設(shè)共包括7個代碼版本,即commit1至commit7,且commit1為上一次編譯成功的代碼版本,則對commit7進行編譯,若commit7編譯成功,說明commit2至commit6都沒有問題,則打包發(fā)布commit7;若commit7編譯失敗,則執(zhí)行以下步驟:
1、從commit1和commit7之間進行平分,代碼回退到commit4進行編譯;
2、若commit4編譯成功,則從commit4和commit7之間進行平分,代碼退回到commit5或者commit6進行編譯,以此類推,直到找到編譯成功的最新代碼版本;
3、若commit4編譯失敗,則從commit4和commit1之間進行平分,代碼退回到commit2或者commit3進行編譯,以此類推,直到找到編譯成功的最新代碼版本;
所有編譯完成后可查看編譯結(jié)果,最新編譯成功的版本就為最新版本,距離最新編譯成功最近的一次編譯失敗則是導(dǎo)致問題的提交,即可通過提交ID確定責(zé)任人,通知責(zé)任人修改問題。
本發(fā)明實施例還提供了一種代碼集成編譯中問題定位的裝置,如圖3所示,可以包括:
代碼集成模塊11,用于:將待編譯的n個代碼段集成為n個代碼版本,其中,第k個代碼版本包括第1個代碼段至第k個代碼段,1≤k≤n;
代碼編譯模塊12,用于:若第1個代碼版本編譯成功且第n個代碼版本編譯失敗,則按照預(yù)設(shè)平分原則選取位于第1個代碼版本及第n個代碼版本中間的代碼版本作為當(dāng)前代碼版本;對當(dāng)前代碼版本進行編譯,若編譯成功,則按照預(yù)設(shè)平分原則選取位于當(dāng)前代碼版本及最近一次編譯失敗的代碼版本中間的代碼版本作為當(dāng)前代碼版本,返回執(zhí)行對當(dāng)前代碼版本進行編譯的步驟;若編譯失敗,則按照預(yù)設(shè)平分原則選取位于最近一次編譯成功的代碼版本及當(dāng)前代碼版本中間的代碼版本作為當(dāng)前代碼版本,返回執(zhí)行對當(dāng)前代碼版本進行編譯的步驟;直至第m個代碼版本編譯成功,則確定第m+1個代碼段為問題代碼段,或者直至選取出的最后一個當(dāng)前代碼版本編譯失敗,則確定第2個代碼段為問題代碼段,第m個代碼版本為編譯成功的代碼版本中最接近第n個代碼版本的代碼版本,1≤m≤n。。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的裝置,還可以包括:
定時模塊,用于預(yù)先設(shè)置執(zhí)行時間間隔,并在每經(jīng)過執(zhí)行時間間隔后則指示代碼集成模塊及代碼編譯模塊進行工作。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的裝置,還可以包括:
打包發(fā)布模塊,用于若對第n個代碼版本進行編譯成功,則對第n個代碼版本包含的全部代碼段進行打包并發(fā)布。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的裝置,還可以包括:
通知模塊,用于確定出問題代碼段之后,基于提交問題代碼段的ID確定出對應(yīng)的負責(zé)人,并發(fā)送代碼錯誤信息至負責(zé)人,以指示負責(zé)人對問題代碼段進行修改。
本發(fā)明實施例提供的一種代碼集成編譯中問題定位的裝置中相關(guān)部分的說明請參見本發(fā)明實施例提供的一種代碼集成編譯中問題定位的方法中對應(yīng)部分的詳細說明,在此不再贅述。
對所公開的實施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。