在數(shù)字化時代,軟件編譯構(gòu)建效率關(guān)系著企業(yè)能否快速響應(yīng)客戶需求,提供更好的客戶體驗。
以汽車行業(yè)為例,隨著汽車數(shù)智升級的加速,主機廠商往往通過OTA模式快速更新軟件,以帶給客戶更佳的用車體驗。
智能化、高體驗的車載軟件已成為汽車的核心競爭力,然而車載軟件通常包含上億行代碼,一次車載軟件的編譯集成需要數(shù)小時,如何提升車載軟件的編譯構(gòu)建效率已成為汽車軟件競爭力構(gòu)筑的關(guān)鍵路徑。
2月14日,華為云發(fā)布分布式編譯構(gòu)建系統(tǒng)CodeArts Build,旨在支撐企業(yè)實現(xiàn)高效的軟件開發(fā),縮短產(chǎn)品上市周期,幫助企業(yè)的軟件產(chǎn)品快速形成關(guān)鍵競爭力。
如何提升軟件編譯構(gòu)建效率?
編譯構(gòu)建效率的提升是個系統(tǒng)工程,需要構(gòu)建工程、構(gòu)建工具、構(gòu)建環(huán)境等各個方面協(xié)同優(yōu)化。通過自動化的構(gòu)建過程、高效的構(gòu)建機制、最大化共享的基礎(chǔ)設(shè)施,才可實現(xiàn)端到端的編譯構(gòu)建效率提升。
第一、將編譯構(gòu)建的過程自動化
軟件是將源代碼及其所依賴的二進制文件等,通過編譯、鏈接、打包等過程形成的二進制文件。通過持續(xù)集成實現(xiàn)編譯構(gòu)建的自動化,已在業(yè)界普遍推行。軟件生成過程的自動化能夠減少人工干預(yù)和重復(fù)操作,實現(xiàn)軟件的快速驗證,更快地發(fā)現(xiàn)錯誤并修復(fù)。
持續(xù)集成是一種軟件開發(fā)實踐,團隊成員頻繁地集成他們的工作,通常每人每天至少集成一次,每次集成通過自動化構(gòu)建(含測試)能夠更高效地查找錯誤,使團隊更加迅速地開發(fā)軟件。
軟件開發(fā)大師Martin Fowler
第二、將自動化的每個環(huán)節(jié)提速
保持快速的構(gòu)建,每減少一分鐘的構(gòu)建時間,就為每個開發(fā)人員在每次提交時節(jié)省一分鐘。
編譯構(gòu)建通常包含如下過程:
第一步,將代碼下載到構(gòu)建服務(wù)器;
第二步,依賴二進制下載到構(gòu)建服務(wù)器;
第三步,編譯、鏈接、打包;
第四步,歸檔軟件包或鏡像。
每個環(huán)節(jié)都可能成為構(gòu)建效率的瓶頸,從而導(dǎo)致軟件產(chǎn)品開發(fā)迭代效率低、發(fā)布周期長。如車載軟件往往基于AOSP(Android Open Source Project,Android開放源代碼項目)開發(fā),代碼倉多達數(shù)百甚至上千個代碼量達千萬行甚至億行規(guī)模,一次軟件構(gòu)建長達數(shù)小時。
提升代碼下載效率和編譯效率,是提升軟件開發(fā)迭代效率、縮短軟件發(fā)布周期的關(guān)鍵。
第三、最大化地共享基礎(chǔ)設(shè)施
在企業(yè)內(nèi)部的開發(fā)場景中,各個開發(fā)團隊往往獨自搭建基礎(chǔ)設(shè)施,每個團隊或個人獨占自建的構(gòu)建資源,導(dǎo)致有的團隊構(gòu)建資源冗余而浪費,有的團隊構(gòu)建資源不足而開發(fā)效率低下。
通過云化將基礎(chǔ)設(shè)施的算力充分共享,實現(xiàn)統(tǒng)一調(diào)度,是解決上述問題的最有效方式,不但能更加高效地構(gòu)建基礎(chǔ)設(shè)施,也可大幅節(jié)省資源。
由此可見,云化是編譯構(gòu)建系統(tǒng)的不二選擇。
華為云CodeArts Build
讓編譯構(gòu)建極速“狂飆”
在華為的敏捷軟件開發(fā)歷程中,軟件的編譯構(gòu)建一直被重點關(guān)注。
從最初始的單機自動化構(gòu)建、到多機自動化構(gòu)建、再到云化的分布式構(gòu)建,如今,軟件的高效編譯構(gòu)建已很好地支撐了華為無線、數(shù)通、車、計算、存儲、終端等各個業(yè)務(wù)的高速發(fā)展,實現(xiàn)更高效的軟件發(fā)布。
華為云CodeArts Build當前已支撐華為6萬研發(fā)人員的軟件高效集成,每日構(gòu)建任務(wù)量達77萬次,集中彈性調(diào)度24.8萬臺構(gòu)建服務(wù)器。通過代碼按需下載、云化、分布式、精準增量、彈性調(diào)度等關(guān)鍵技術(shù),端到端加速軟件集成過程,讓開發(fā)人員編譯結(jié)果分鐘級反饋、版本包30分鐘集成、億級代碼全量構(gòu)建1小時完成。
具體來看,華為云CodeArts Build的極速構(gòu)建能力體現(xiàn)在如下六個方面:
環(huán)境搭建快:開箱即用,環(huán)境無感知,快速搭建持續(xù)集成系統(tǒng)
華為云CodeArts Build內(nèi)置130多種構(gòu)建環(huán)境、30多個模板、20多個插件,用戶開箱即用。同時,CodeArts Build支持多平臺、多系統(tǒng)構(gòu)建,包括x86、ARM等計算架構(gòu),以及Linux、Windows、MacOS等操作系統(tǒng)。
通過內(nèi)置上述的跨平臺環(huán)境,可消除人工搭建編譯服務(wù)器、配置持續(xù)集成軟件等環(huán)節(jié),幫助用戶快速完成持續(xù)集成系統(tǒng)的搭建。
代碼下載快:基于文件內(nèi)容指紋的代碼緩存技術(shù),讓代碼極速下載
隨著產(chǎn)品的規(guī)模增加,產(chǎn)品的代碼量也會急劇膨脹,構(gòu)建過程中的代碼下載時間也變得越來越長。
以AOSP項目13版本為例,代碼量為140G,千兆帶寬全量下載一次代碼需要20分鐘左右,代碼下載時長成為影響構(gòu)建效率的關(guān)鍵瓶頸之一。如果將代碼固定到構(gòu)建執(zhí)行機上,每次構(gòu)建增量下載,又可能會存在代碼不一致或代碼在構(gòu)建過程中被污染的問題。
華為云CodeArts Build提供代碼下載加速技術(shù),通過對源碼文件樹進行特征識別碼計算,基于構(gòu)建專用的分布式文件存儲系統(tǒng),對源碼進行權(quán)限加密和去重存儲,實現(xiàn)文件一次緩存多次復(fù)用,大大減少了從代碼倉下載文件的次數(shù)。
同時,通過VPC內(nèi)的專用網(wǎng)絡(luò)通道,高效地從緩存復(fù)用代碼,從而實現(xiàn)構(gòu)建時代碼的高效下載。
編譯速度快:大規(guī)模分布式、精準增量編譯,突破單機物理限制,構(gòu)建效率成倍提升
大型嵌入式項目通常包含數(shù)量龐大的模塊或組件,如車載軟件、基站、智能終端、存儲產(chǎn)品等,且C/C++代碼量巨大,上千萬行甚至上億行,編譯執(zhí)行時間長是阻礙產(chǎn)品迭代開發(fā)效率提升的關(guān)鍵因素。傳統(tǒng)的軟件開發(fā)構(gòu)建,一般在單機上編譯,受限于編譯服務(wù)器的性能,一次復(fù)雜軟件的全量構(gòu)建時間往往長達幾小時甚至數(shù)十小時。
華為云CodeArts Build提供分布式編譯、精準增量等技術(shù),突破單臺機器的性能瓶頸,通過云的大規(guī)模彈性資源實現(xiàn)C/C++語言的編譯加速。同時通過共享的分布式緩存和精準的依賴識別,實現(xiàn)編譯命令的按需分發(fā),在節(jié)約成本的基礎(chǔ)上成倍提升構(gòu)建效率。
組件集成快:提供BuildFlow編排模式,多任務(wù)并行構(gòu)建,實現(xiàn)多組件的高效集成
大型軟件項目往往涉及到多個團隊協(xié)作開發(fā),同時軟件構(gòu)建時也可能涉及多種計算架構(gòu)和多種操作系統(tǒng)。
如華為5G基站產(chǎn)品,一次軟件構(gòu)建,需要集成來自4條產(chǎn)品線、20多個團隊提供的組件,并且需要同時在x86和ARM計算架構(gòu)上集成出包。各個組件間基于軟件架構(gòu)的設(shè)計,形成有向無環(huán)圖,需要一次完成軟件包的集成。
針對這一涉及到多個團隊協(xié)作、多種計算架構(gòu)、多種操作系統(tǒng)和構(gòu)建工程存在依賴的復(fù)雜構(gòu)建場景,華為云CodeArts Build提供了BuildFlow編排模式,開發(fā)或集成工程師基于多組件依賴關(guān)系的按需編排,可讓構(gòu)建任務(wù)按照任務(wù)依賴關(guān)系以有向無環(huán)圖的方式構(gòu)建。
通過高效、靈活的BuildFlow構(gòu)建模式,不僅可以滿足復(fù)雜的構(gòu)建要求,還可以將現(xiàn)有的構(gòu)建任務(wù)以模塊化的方式進行拆分,通過多任務(wù)并行構(gòu)建,實現(xiàn)軟件包的快速構(gòu)建集成。
多代碼倉下載快:提供基于Repo工具的多倉下載模式,實現(xiàn)多代碼倉高效集成
智能終端、車載軟件、物聯(lián)網(wǎng)設(shè)備等嵌入式軟件領(lǐng)域,通?;邙櫭?、AOSP等系統(tǒng)開發(fā),一次構(gòu)建需要同時集成數(shù)百甚至上千個代碼倉,多代碼倉的集成下載效率至關(guān)重要。
華為云CodeArts Build集成Repo下載工具,用戶只需進行簡單配置即可實現(xiàn)多個代碼倉的聯(lián)動集成下載。同時也可集成代碼緩存技術(shù),實現(xiàn)多個代碼倉的聯(lián)動高效下載。
資源利用效率高:支持企業(yè)范圍內(nèi)的資源共享,高效利用構(gòu)建資源
華為云CodeArts Build通過統(tǒng)一彈性調(diào)度華為無線、數(shù)通、光、車、計算、存儲等各產(chǎn)品線的構(gòu)建資源,實現(xiàn)企業(yè)級數(shù)十萬臺構(gòu)建資源的共享。相比各產(chǎn)品、項目團隊自建、獨占構(gòu)建資源,可節(jié)省70%構(gòu)建資源。
同時,對于不同產(chǎn)業(yè)的不同產(chǎn)品研發(fā)場景,提供對應(yīng)的編譯構(gòu)建算力,用極低成本實現(xiàn)高效的研發(fā)作業(yè)。通過實踐外溢,可幫助企業(yè)實現(xiàn)構(gòu)建資源的高效利用。
華為云CodeArts Build已支撐華為公司云計算、網(wǎng)絡(luò)、終端、芯片、汽車等各個業(yè)務(wù)的高速發(fā)展。
例如,CodeArts Build通過極致的構(gòu)建加速能力,幫助光產(chǎn)品線各產(chǎn)品億級代碼全量構(gòu)建時長縮短20倍,組件間集成周期從1周縮短到1小時;通過云的彈性調(diào)度能力,實現(xiàn)構(gòu)建資源的按需獲取和低成本構(gòu)建,構(gòu)建服務(wù)器消耗從3.6萬臺降低到1萬臺。
面向未來,華為云CodeArts Build將基于AI決策實現(xiàn)更為高效、精準的彈性調(diào)度能力,面向更多復(fù)雜語言的軟件產(chǎn)品,實現(xiàn)多語言的編譯構(gòu)建框架,與客戶、伙伴和廣大開發(fā)者一起,不斷書寫軟件世界的新篇章。