增量構建方法及裝置與流程
2023-08-05 23:27:16
本發明涉及軟體開發技術領域,具體而言,涉及一種增量構建方法,還涉及一種增量構建裝置。
背景技術:
隨著軟體規模的擴大和軟體複雜度的提高,在研發過程中儘快的獲得最新的開發修改並進行驗證,變得越發重要。傳統以全量構建、打包、安裝(部署)、提供給測試驗證的方式存在以下缺點:
1.通常上百人或者更大規模的研發團隊,每天能有數百次的提交,如果每個版本進行全量構建、打包、安裝(部署),就要數百小時甚至更多;
2.按計劃按固定時間間隔進行全量打包的方式,無法剝離安裝包中錯誤提交;
3.以手工開發本地構建,發布增量替換文件給測試驗證的方式,無法保證開發本地構建替換文件時的編譯構建環境和構建伺服器的構建環境一致,無法保證開發本地構建替換文件時的代碼最終會提交到代碼倉庫;
4.開發提交代碼後,通過構建伺服器,更新相關的工程(項目)最新代碼並進行構建,發布增量替換文件給測試的方式,會帶入其他開發新的提交,可能帶入新的問題;
5.開發提交代碼後,通過構建伺服器,更新相關的工程(項目)指定版本並行構建,發布增量替換文件給測試的方式,可能造成少選工程或者多選工程,導致修改的代碼和替換文件不一致;
6.4和5兩種情況,無法準確的識別依賴組件的變更,會產生組件不兼容,或者工程依賴的組件未更新的情況。
因此,如何針對每次提交的變更集進行增量構建、打包、安裝(部署),並提供給測試驗證,以規避上述缺陷,成為目前亟待解決的問題。
技術實現要素:
本發明旨在至少解決現有技術或相關技術中存在的技術問題之一。
為此,本發明的一個目的在於提出了一種增量構建方法。
本發明的另一個目的在於提出了一種增量構建裝置。
有鑑於此,本發明提出了一種增量構建方法,包括:定義構建任務的類型及其相應的執行順序;獲取構建任務的變更集;將構建任務的變更集按照執行順序進行排序,生成構建任務列表;根據構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包。
根據本發明的增量構建方法,通過定義構建任務的類型及其相應的執行順序,在識別構建任務的變更集之後,能夠自動生成構建任務列表,基於生成的構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包,從而實現快速、準確的構建增量包,減少了開發與測試之間的問題反覆以及可能影響產品質量的因素,提升了產品研發效率以及補丁包的發布頻度。
另外,根據本發明上述的增量構建方法,還可以具有如下附加的技術特徵:
在上述技術方案中,優選地,獲取構建任務的變更集,具體包括:每次代碼修改完畢後,在提交日誌中生成問題編號(issue_id),構建問題列表(issue_id列表);將發布通過的問題列表的相關代碼更新到代碼基準庫;編譯相關代碼,將編譯中間產物更新到編譯環境基準庫;根據問題列表,從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表);讀取提交列表中的變更集。
在該技術方案中,產品研發過程中,開發完成某個新功能或者修復完某個bug(漏洞),通過在提交日誌中輸入問題編號(issue_id),能夠快速構建出問題列表(issue_id列表),增加了增量構建的靈活性,例如,可以將issue_a、issue_b、issue_c一起構建,如果中途發現issue_b的修復有問題,在issue_b和[issue_a、issue_c]變更集無交集的情況下,可將issue_b剝離,重新構建issue_a和issue_c;通過將發布通過的問題列表對應的相關代碼更新到代碼基準庫,以及將編譯中間產物更新到編譯環境基準庫,以增強軟體的可維護性,防止後續出現的問題;通過從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表),能夠自動識別變更集,避免了遺漏增量文件和髒代碼的帶入。
在上述任一技術方案中,優選地,執行順序包括:不同類型的構建任務的執行順序、相同類型的構建任務的執行順序。
在該技術方案中,構建任務的執行順序包括不同類型的構建任務的執行順序以及相同類型的構建任務的執行順序,通過對構建任務的執行順序進行定義,自動識別變更集,推導出構建任務列表的方式,避免了遺漏增量文件和髒代碼的帶入,同時也提升了構建增量的速度,進而提升提升了產品研發效率以及補丁包的發布頻度。
在上述任一技術方案中,優選地,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁。
在該技術方案中,本領域技術人員應該理解,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁,但不限於此。優選地,當構建任務為以上三種類型並存時,執行順序為資料庫腳本、工程、網頁。
在上述任一技術方案中,優選地,當構建任務的類型為資料庫腳本時,包括系統庫腳本、模板庫腳本、升級腳本;當構建任務的類型為工程時,包括工程的依賴關係。
在該技術方案中,本領域技術人員應該理解,當構建任務的類型為資料庫腳本時,資料庫腳本包括系統庫腳本、模板庫腳本、升級腳本,但不限於此。優選地,當以上三種資料庫腳本並存時,執行順序為系統庫腳本、模板庫腳本、升級腳本。當構建任務的類型為工程時,根據工程的依賴關係排序並依次執行。
本發明還提出一種增量構建裝置,包括:設置單元,用於定義構建任務的類型及其相應的執行順序;獲取單元,用於獲取構建任務的變更集;增量構建單元,用於將構建任務的變更集按照執行順序進行排序,生成構建任務列表;增量構建單元,還用於根據構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包。
根據本發明的增量構建裝置,通過定義構建任務的類型及其相應的執行順序,在識別構建任務的變更集之後,能夠自動生成構建任務列表,基於生成的構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包,從而實現快速、準確的構建增量包,減少了開發與測試之間的問題反覆以及可能影響產品質量的因素,提升了產品研發效率以及補丁包的發布頻度。
另外,根據本發明上述的增量構建裝置,還可以具有如下附加的技術特徵:
在上述技術方案中,優選地,獲取單元具體包括:問題列表生成單元,用於每次代碼修改完畢後,在提交日誌中生成問題編號(issue_id),構建問題列表(issue_id列表);代碼更新單元,用於將發布通過的問題列表的相關代碼更新到代碼基準庫;編譯更新單元,用於編譯相關代碼,將編譯中間產物更新到編譯環境基準庫;查找單元,用於根據問題列表,從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表);讀取單元,用於讀取提交列表中的變更集。
在該技術方案中,產品研發過程中,開發完成某個新功能或者修復完某個bug(漏洞),通過在提交日誌中輸入問題編號(issue_id),能夠快速構建出問題列表(issue_id列表),增加了增量構建的靈活性,例如,可以將issue_a、issue_b、issue_c一起構建,如果中途發現issue_b的修復有問題,在issue_b和[issue_a、issue_c]變更集無交集的情況下,可將issue_b剝離,重新構建issue_a和issue_c;通過將發布通過的問題列表對應的相關代碼更新到代碼基準庫,以及將編譯中間產物更新到編譯環境基準庫,以增強軟體的可維護性,防止後續出現的問題;通過從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表),能夠自動識別變更集,避免了遺漏增量文件和髒代碼的帶入。
在上述任一技術方案中,優選地,執行順序包括:不同類型的構建任務的執行順序、相同類型的構建任務的執行順序。
在該技術方案中,構建任務的執行順序包括不同類型的構建任務的執行順序以及相同類型的構建任務的執行順序,通過對構建任務的執行順序進行定義,自動識別變更集,推導出構建任務列表的方式,避免了遺漏增量文件和髒代碼的帶入,同時也提升了構建增量的速度,進而提升提升了產品研發效率以及補丁包的發布頻度。
在上述任一技術方案中,優選地,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁。
在該技術方案中,本領域技術人員應該理解,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁,但不限於此。優選地,當構建任務為以上三種類型並存時,執行順序為資料庫腳本、工程、網頁。
在上述任一技術方案中,優選地,當構建任務的類型為資料庫腳本時,包括系統庫腳本、模板庫腳本、升級腳本;當構建任務的類型為工程時,包括工程的依賴關係。
在該技術方案中,本領域技術人員應該理解,當構建任務的類型為資料庫腳本時,資料庫腳本包括系統庫腳本、模板庫腳本、升級腳本,但不限於此。優選地,當以上三種資料庫腳本並存時,執行順序為系統庫腳本、模板庫腳本、升級腳本。當構建任務的類型為工程時,根據工程的依賴關係排序並依次執行。
本發明的附加方面和優點將在下面的描述部分中變得明顯,或通過本發明的實踐了解到。
附圖說明
本發明的上述和/或附加的方面和優點從結合下面附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1示出了本發明一實施例的增量構建方法的流程示意圖;
圖2示出了本發明再一實施例的增量構建方法的流程示意圖;
圖3示出了本發明一實施例的增量構建裝置的示意框圖;
圖4示出了本發明再一實施例的增量構建裝置的示意框圖。
具體實施方式
為了能夠更清楚地理解本發明的上述目的、特徵和優點,下面結合附圖和具體實施方式對本發明進行進一步的詳細描述。需要說明的是,在不衝突的情況下,本申請的實施例及實施例中的特徵可以相互組合。
在下面的描述中闡述了很多具體細節以便於充分理解本發明,但是,本發明還可以採用其他不同於在此描述的其他方式來實施,因此,本發明的保護範圍並不受下面公開的具體實施例的限制。
如圖1所示,根據本發明一實施例的增量構建方法的流程示意圖:
步驟102,定義構建任務的類型及其相應的執行順序;
步驟104,獲取構建任務的變更集;
步驟106,將構建任務的變更集按照執行順序進行排序,生成構建任務列表;
步驟108,根據構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包。
在該實施例中,通過定義構建任務的類型及其相應的執行順序,在識別構建任務的變更集之後,能夠自動生成構建任務列表,基於生成的構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包,從而實現快速、準確的構建增量包,減少了開發與測試之間的問題反覆以及可能影響產品質量的因素,提升了產品研發效率以及補丁包的發布頻度。
如圖2所示,根據本發明再一實施例的增量構建方法的流程示意圖:
步驟202,定義構建任務的類型及其相應的執行順序;
步驟204,獲取構建任務的變更集;
步驟206,將構建任務的變更集按照執行順序進行排序,生成構建任務列表;
步驟208,根據構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包;
其中,步驟204具體包括:
步驟2042,每次代碼修改完畢後,在提交日誌中生成問題編號(issue_id),構建問題列表(issue_id列表);
步驟2044,將發布通過的問題列表的相關代碼更新到代碼基準庫;編譯相關代碼,將編譯中間產物更新到編譯環境基準庫;
步驟2046,根據問題列表,從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表);讀取提交列表中的變更集。
在該實施例中,產品研發過程中,開發完成某個新功能或者修復完某個bug(漏洞),通過在提交日誌中輸入問題編號(issue_id),能夠快速構建出問題列表(issue_id列表),增加了增量構建的靈活性,例如,可以將issue_a、issue_b、issue_c一起構建,如果中途發現issue_b的修復有問題,在issue_b和[issue_a、issue_c]變更集無交集的情況下,可將issue_b剝離,重新構建issue_a和issue_c;通過將發布通過的問題列表對應的相關代碼更新到代碼基準庫,以及將編譯中間產物更新到編譯環境基準庫,以增強軟體的可維護性,防止後續出現的問題;通過從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表),能夠自動識別變更集,避免了遺漏增量文件和髒代碼的帶入。
在上述任一實施例中,優選地,執行順序包括:不同類型的構建任務的執行順序、相同類型的構建任務的執行順序。
在該實施例中,構建任務的執行順序包括不同類型的構建任務的執行順序以及相同類型的構建任務的執行順序,通過對構建任務的執行順序進行定義,自動識別變更集,推導出構建任務列表的方式,避免了遺漏增量文件和髒代碼的帶入,同時也提升了構建增量的速度,進而提升提升了產品研發效率以及補丁包的發布頻度。
在上述任一實施例中,優選地,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁。
在該實施例中,本領域技術人員應該理解,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁,但不限於此。優選地,當構建任務為以上三種類型並存時,執行順序為資料庫腳本、工程、網頁。
在上述任一實施例中,優選地,當構建任務的類型為資料庫腳本時,包括系統庫腳本、模板庫腳本、升級腳本;當構建任務的類型為工程時,包括工程的依賴關係。
在該實施例中,本領域技術人員應該理解,當構建任務的類型為資料庫腳本時,資料庫腳本包括系統庫腳本、模板庫腳本、升級腳本,但不限於此。優選地,當以上三種資料庫腳本並存時,執行順序為系統庫腳本、模板庫腳本、升級腳本。當構建任務的類型為工程時,根據工程的依賴關係排序並依次執行。
如圖3所示,根據本發明一實施例的增量構建裝置的示意框圖:該裝置包括:
設置單元302,用於定義構建任務的類型及其相應的執行順序;
獲取單元304,用於獲取構建任務的變更集;
增量構建單元306,用於將構建任務的變更集按照執行順序進行排序,生成構建任務列表;
增量構建單元306,還用於根據構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包。
在該實施例中,通過定義構建任務的類型及其相應的執行順序,在識別構建任務的變更集之後,能夠自動生成構建任務列表,基於生成的構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包,從而實現快速、準確的構建增量包,減少了開發與測試之間的問題反覆以及可能影響產品質量的因素,提升了產品研發效率以及補丁包的發布頻度。
如圖4所示,根據本發明再一實施例的增量構建裝置的示意框圖:該裝置包括:
設置單元402,用於定義構建任務的類型及其相應的執行順序;
獲取單元404,用於獲取構建任務的變更集;
增量構建單元406,用於將構建任務的變更集按照執行順序進行排序,生成構建任務列表;
增量構建單元406,還用於根據構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包;
其中,獲取單元404具體包括:
問題列表生成單元4042,用於每次代碼修改完畢後,在提交日誌中生成問題編號(issue_id),構建問題列表(issue_id列表);
代碼更新單元4044,用於將發布通過的問題列表的相關代碼更新到代碼基準庫;
編譯更新單元4046,用於編譯相關代碼,將編譯中間產物更新到編譯環境基準庫;
查找單元4048,用於根據問題列表,從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表);
讀取單元4050,用於讀取提交列表中的變更集。
在該實施例中,產品研發過程中,開發完成某個新功能或者修復完某個bug(漏洞),通過在提交日誌中輸入問題編號(issue_id),能夠快速構建出問題列表(issue_id列表),增加了增量構建的靈活性,例如,可以將issue_a、issue_b、issue_c一起構建,如果中途發現issue_b的修復有問題,在issue_b和[issue_a、issue_c]變更集無交集的情況下,可將issue_b剝離,重新構建issue_a和issue_c;通過將發布通過的問題列表對應的相關代碼更新到代碼基準庫,以及將編譯中間產物更新到編譯環境基準庫,以增強軟體的可維護性,防止後續出現的問題;通過從代碼基準庫中查找出與問題編號相關聯的提交列表(commit列表),能夠自動識別變更集,避免了遺漏增量文件和髒代碼的帶入。
在上述任一實施例中,優選地,執行順序包括:不同類型的構建任務的執行順序、相同類型的構建任務的執行順序。
在該實施例中,構建任務的執行順序包括不同類型的構建任務的執行順序以及相同類型的構建任務的執行順序,通過對構建任務的執行順序進行定義,自動識別變更集,推導出構建任務列表的方式,避免了遺漏增量文件和髒代碼的帶入,同時也提升了構建增量的速度,進而提升提升了產品研發效率以及補丁包的發布頻度。
在上述任一實施例中,優選地,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁。
在該實施例中,本領域技術人員應該理解,構建任務的類型包括以下至少任一項或其組合:資料庫腳本、工程、網頁,但不限於此。優選地,當構建任務為以上三種類型並存時,執行順序為資料庫腳本、工程、網頁。
在上述任一實施例中,優選地,當構建任務的類型為資料庫腳本時,包括系統庫腳本、模板庫腳本、升級腳本;當構建任務的類型為工程時,包括工程的依賴關係。
在該實施例中,本領域技術人員應該理解,當構建任務的類型為資料庫腳本時,資料庫腳本包括系統庫腳本、模板庫腳本、升級腳本,但不限於此。優選地,當以上三種資料庫腳本並存時,執行順序為系統庫腳本、模板庫腳本、升級腳本。當構建任務的類型為工程時,根據工程的依賴關係排序並依次執行。
具體實施例,暢捷通tplus產品,在產品研發過程中,開發完成某個新功能/修復完某個bug,或者在產品發布後,針對用戶在使用過程中提出的缺陷,開發完成bug修復,按照變更集構建增量包,步驟如下:
首先,定義構建任務的類型、定義不同類型的構建任務執行順序、定義相同類型的構建任務的執行順序,如表1、2所示:
表1構建任務類型及執行順序
表2定義源碼目錄對應構建任務的關係
其次,開發在提交代碼時,在提交日誌中輸入issue_id,生成[issue_id列表];
具體的構建[issue_id列表]的增量包的過程如下:
a.維護代碼基準、編譯環境基準
將已經發布通過的[issue_id列表]相關代碼更新到代碼基準、編譯中間產物更新到編譯環境基準;
b.識別[issue_id列表]的變更集
根據[issue_id列表]從代碼倉庫中找到對應的commit列表,讀取commit列表中的變更集;
c.根據[issue_id列表]的變更集,通過,推導出[構建任務列表];
d.根據,對[構建任務列表]排序,得到[排序後的構建任務列表];
e.根據[排序後的構建任務列表]創建[編譯環境];
f.按順序執行[排序後的構建任務列表],將編譯輸出的文件打成[增量包]。
在該實施例中,過定義構建任務的類型及其相應的執行順序,在識別構建任務的變更集之後,能夠自動生成構建任務列表,基於生成的構建任務列表創建編譯環境,並依次進行編譯,將編譯輸出文件壓縮成增量包,從而實現快速、準確的構建增量包,減少了開發與測試之間的問題反覆以及可能影響產品質量的因素,提升了產品研發效率以及補丁包的發布頻度。
以上所述僅為本發明的優選實施例而已,並不用於限制本發明,對於本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。