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