華為雲釋出分散式編譯構建系統CodeArts Build

華為雲開發者聯盟發表於2023-02-15
摘要:2月14日,華為雲釋出分散式編譯構建系統CodeArts Build,旨在支撐企業實現高效的軟體開發,縮短產品上市週期,幫助企業的軟體產品快速形成關鍵競爭力。

本文分享自華為雲社群《唯快不破!華為雲釋出分散式編譯構建系統CodeArts Build》,作者: 華為雲頭條 。

在數字化時代,軟體編譯構建效率關係著企業能否快速響應客戶需求,提供更好的客戶體驗。

以汽車行業為例,隨著汽車數智升級的加速,主機廠商往往透過OTA模式快速更新軟體,以帶給客戶更佳的用車體驗。

智慧化、高體驗的車載軟體已成為汽車的核心競爭力,然而車載軟體通常包含上億行程式碼,一次車載軟體的編譯整合需要數小時,如何提升車載軟體的編譯構建效率已成為汽車軟體競爭力構築的關鍵路徑。

2月14日,華為雲釋出分散式編譯構建系統CodeArts Build,旨在支撐企業實現高效的軟體開發,縮短產品上市週期,幫助企業的軟體產品快速形成關鍵競爭力。

如何提升軟體編譯構建效率?

編譯構建效率的提升是個系統工程,需要構建工程、構建工具、構建環境等各個方面協同最佳化。透過自動化的構建過程、高效的構建機制、最大化共享的基礎設施,才可實現端到端的編譯構建效率提升。

▶第一、將編譯構建的過程自動化

軟體是將原始碼及其所依賴的二進位制檔案等,透過編譯、連結、打包等過程形成的二進位制檔案。透過持續整合實現編譯構建的自動化,已在業界普遍推行。軟體生成過程的自動化能夠減少人工干預和重複操作,實現軟體的快速驗證,更快地發現錯誤並修復。

軟體開發大師Martin Fowler曾這樣解釋持續整合:持續整合是一種軟體開發實踐,團隊成員頻繁地整合他們的工作,通常每人每天至少整合一次,每次整合透過自動化構建(含測試)能夠更高效地查詢錯誤,使團隊更加迅速地開發軟體。

▶第二、將自動化的每個環節提速

保持快速的構建,每減少一分鐘的構建時間,就為每個開發人員在每次提交時節省一分鐘。

編譯構建通常包含如下過程:

  • 第一步,將程式碼下載到構建伺服器;
  • 第二步,依賴二進位制下載到構建伺服器;
  • 第三步,編譯、連結、打包;
  • 第四步,歸檔軟體包或映象。

每個環節都可能成為構建效率的瓶頸,從而導致軟體產品開發迭代效率低、釋出週期長。如車載軟體往往基於AOSP(Android Open Source Project,Android開放原始碼專案)開發,程式碼倉多達數百甚至上千個程式碼量達千萬行甚至億行規模,一次軟體構建長達數小時。

提升程式碼下載效率和編譯效率,是提升軟體開發迭代效率、縮短軟體釋出週期的關鍵。

▶第三、最大化地共享基礎設施

在企業內部的開發場景中,各個開發團隊往往獨自搭建基礎設施,每個團隊或個人獨佔自建的構建資源,導致有的團隊構建資源冗餘而浪費,有的團隊構建資源不足而開發效率低下。

透過雲化將基礎設施的算力充分共享,實現統一排程,是解決上述問題的最有效方式,不但能更加高效地構建基礎設施,也可大幅節省資源。

由此可見,雲化是編譯構建系統的不二選擇

華為雲CodeArts Build,讓編譯構建極速“狂飆”

在華為的敏捷軟體開發歷程中,軟體的編譯構建一直被重點關注。

從最初始的單機自動化構建、到多機自動化構建、再到雲化的分散式構建,如今,軟體的高效編譯構建已很好地支撐了華為無線、數通、車、計算、儲存、終端等各個業務的高速發展,實現更高效的軟體釋出。

華為雲CodeArts Build當前已支撐華為6萬研發人員的軟體高效整合,每日構建任務量達77萬次,集中彈性排程24.8萬臺構建伺服器。透過程式碼按需下載、雲化、分散式、精準增量、彈性排程等關鍵技術,端到端加速軟體整合過程,讓開發人員編譯結果分鐘級反饋、版本包30分鐘整合、億級程式碼全量構建1小時完成。

具體來看,華為雲CodeArts Build的極速構建能力體現在如下六個方面:

▶環境搭建快:開箱即用,環境無感知,快速搭建持續整合系統

華為雲CodeArts Build內建130多種構建環境、30多個模板、20多個外掛,使用者開箱即用。同時,CodeArts Build支援多平臺、多系統構建,包括x86、ARM等計算架構,以及Linux、Windows、MacOS等作業系統。

透過內建上述的跨平臺環境,可消除人工搭建編譯伺服器、配置持續整合軟體等環節,幫助使用者快速完成持續整合系統的搭建。

1.png

▶程式碼下載快:基於檔案內容指紋的程式碼快取技術,讓程式碼極速下載

隨著產品的規模增加,產品的程式碼量也會急劇膨脹,構建過程中的程式碼下載時間也變得越來越長。

以AOSP專案13版本為例,程式碼量為140G,千兆頻寬全量下載一次程式碼需要20分鐘左右,程式碼下載時長成為影響構建效率的關鍵瓶頸之一。如果將程式碼固定到構建執行機上,每次構建增量下載,又可能會存在程式碼不一致或程式碼在構建過程中被汙染的問題。

華為雲CodeArts Build提供程式碼下載加速技術,透過對原始碼檔案樹進行特徵識別碼計算,基於構建專用的分散式檔案儲存系統,對原始碼進行許可權加密和去重儲存,實現檔案一次快取多次複用,大大減少了從程式碼倉下載檔案的次數。

同時,透過VPC內的專用網路通道,高效地從快取複用程式碼,從而實現構建時程式碼的高效下載。

2.jpg

▶編譯速度快:大規模分散式、精準增量編譯,突破單機物理限制,構建效率成倍提升

大型嵌入式專案通常包含數量龐大的模組或元件,如車載軟體、基站、智慧終端、儲存產品等,且C/C++程式碼量巨大,上千萬行甚至上億行,編譯執行時間長是阻礙產品迭代開發效率提升的關鍵因素。傳統的軟體開發構建,一般在單機上編譯,受限於編譯伺服器的效能,一次複雜軟體的全量構建時間往往長達幾小時甚至數十小時。

華為雲CodeArts Build提供分散式編譯、精準增量等技術,突破單臺機器的效能瓶頸,透過雲的大規模彈性資源實現C/C++語言的編譯加速。同時透過共享的分散式快取和精準的依賴識別,實現編譯命令的按需分發,在節約成本的基礎上成倍提升構建效率。

3.jpg

▶元件整合快:提供BuildFlow編排模式,多工並行構建,實現多元件的高效整合

大型軟體專案往往涉及到多個團隊協作開發,同時軟體構建時也可能涉及多種計算架構和多種作業系統。

如華為5G基站產品,一次軟體構建,需要整合來自4條產品線、20多個團隊提供的元件,並且需要同時在x86和ARM計算架構上整合出包。各個元件間基於軟體架構的設計,形成有向無環圖,需要一次完成軟體包的整合。

針對這一涉及到多個團隊協作、多種計算架構、多種作業系統和構建工程存在依賴的複雜構建場景,華為雲CodeArts Build提供了BuildFlow編排模式,開發或整合工程師基於多元件依賴關係的按需編排,可讓構建任務按照任務依賴關係以有向無環圖的方式構建。

透過高效、靈活的BuildFlow構建模式,不僅可以滿足複雜的構建要求,還可以將現有的構建任務以模組化的方式進行拆分,透過多工並行構建,實現軟體包的快速構建整合。

4.jpg

▶多程式碼倉下載快:提供基於Repo工具的多倉下載模式,實現多程式碼倉高效整合

智慧終端、車載軟體、物聯網裝置等嵌入式軟體領域,通常基於鴻蒙、AOSP等系統開發,一次構建需要同時整合數百甚至上千個程式碼倉,多程式碼倉的整合下載效率至關重要。

華為雲CodeArts Build整合Repo下載工具,使用者只需進行簡單配置即可實現多個程式碼倉的聯動整合下載。同時也可整合程式碼快取技術,實現多個程式碼倉的聯動高效下載。

5.jpg

▶資源利用效率高:支援企業範圍內的資源共享,高效利用構建資源

華為雲CodeArts Build透過統一彈性排程華為無線、數通、光、車、計算、儲存等各產品線的構建資源,實現企業級數十萬臺構建資源的共享。相比各產品、專案團隊自建、獨佔構建資源,可節省70%構建資源。

同時,對於不同產業的不同產品研發場景,提供對應的編譯構建算力,用極低成本實現高效的研發作業。透過實踐外溢,可幫助企業實現構建資源的高效利用。

6.jpg

華為雲CodeArts Build已支撐華為公司雲端計算、網路、終端、晶片、汽車等各個業務的高速發展。

例如,CodeArts Build透過極致的構建加速能力,幫助光產品線各產品億級程式碼全量構建時長縮短20倍,元件間整合周期從1周縮短到1小時;透過雲的彈性排程能力,實現構建資源的按需獲取和低成本構建,構建伺服器消耗從3.6萬臺降低到1萬臺

面向未來,華為雲CodeArts Build將基於AI決策實現更為高效、精準的彈性排程能力,面向更多複雜語言的軟體產品,實現多語言的編譯構建框架,與客戶、夥伴和廣大開發者一起,不斷書寫軟體世界的新篇章。

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章