嵌入式最大的趨勢(shì)之一是采用和改進(jìn)持續(xù)集成/持續(xù)部署(CI/CD)實(shí)踐。CI/CD背后的思想是團(tuán)隊(duì)需要盡可能多地自動(dòng)化他們的嵌入式開發(fā)過程。
今天的嵌入式系統(tǒng)對(duì)于人工工作來說已經(jīng)變得過于復(fù)雜和精密。當(dāng)然,你無法擺脫它,但是在開發(fā)周期中有太多可以自動(dòng)化的東西。如果利用得當(dāng),自動(dòng)化可以簡(jiǎn)化開發(fā)、降低成本和縮短上市時(shí)間。
在今天的文章中,我們將探討三種簡(jiǎn)單的方法來幫助你開始使用嵌入式軟件的CI/CD。
技巧1:量化價(jià)值
開始你的CI/CD之旅時(shí),先量化開始這項(xiàng)工作需要花費(fèi)的時(shí)間和成本,然后再量化它將帶來的好處。例如,你可能會(huì)考慮實(shí)施成本,例如:
每個(gè)用戶的工具成本
每位用戶的培訓(xùn)成本
管道設(shè)計(jì)和安裝成本
每年的維護(hù)成本
每個(gè)用戶的時(shí)間投資
一旦你了解成本,你必須問自己:你有投資CI/CD開發(fā)的預(yù)算嗎?你的團(tuán)隊(duì)是否有足夠的資源來實(shí)施新流程、接受培訓(xùn)等?
然而,上述問題并不能讓你了解全貌。你還需要量化收益,例如:
在bug到達(dá)客戶手中之前將其捕獲
利用TDD和模擬等現(xiàn)代技術(shù)
通過利用自動(dòng)化和提高產(chǎn)品質(zhì)量來降低成本和縮短上市時(shí)間
如果你預(yù)先花一些時(shí)間分析你從CI/CD中獲得的收益與成本,你會(huì)發(fā)現(xiàn)它提供了很好的投資回報(bào)。
技巧2:構(gòu)建自動(dòng)化
開始使用CI/CD最簡(jiǎn)單和最容易的方法是讓你的軟件自動(dòng)構(gòu)建。構(gòu)建自動(dòng)化是關(guān)鍵的第一步。它為你提供了設(shè)置可重用構(gòu)建環(huán)境和腳本來控制管道的經(jīng)驗(yàn)。
可重用的構(gòu)建環(huán)境通常是使用Docker之類的容器工具來實(shí)現(xiàn)的。Docker允許你打包構(gòu)建軟件所需的環(huán)境和工具。該容器可用于在服務(wù)器上構(gòu)建你的軟件,但開發(fā)人員也可以在開發(fā)過程中使用它來構(gòu)建軟件!
由于開發(fā)人員在他們的計(jì)算機(jī)上有不同的構(gòu)建環(huán)境,bug突然出現(xiàn)并不罕見。容器有助于確保每個(gè)人在完全相同的環(huán)境中使用完全相同的工具。這包括你剛剛起步的CI/CD渠道!
相同的環(huán)境非常重要,因?yàn)楫?dāng)你在CI/CD管道中運(yùn)行一個(gè)作業(yè)來構(gòu)建最新的固件時(shí),服務(wù)器上的環(huán)境應(yīng)該與你開發(fā)代碼的環(huán)境相同。否則,管道可能會(huì)說你的代碼無法構(gòu)建,而實(shí)際上,這可能只是一個(gè)服務(wù)器配置問題。
構(gòu)建自動(dòng)化是很好的第一步,因?yàn)樗试S你和團(tuán)隊(duì)驗(yàn)證你最近的提交實(shí)際上構(gòu)建成功了。你可能會(huì)想,誰會(huì)提交不起作用的代碼呢?它確實(shí)發(fā)生了。對(duì)看起來很好的代碼做一點(diǎn)小小的調(diào)整,卻發(fā)現(xiàn)它無法構(gòu)建,這種情況并不罕見。
技巧3:自動(dòng)化代碼度量報(bào)告
一旦有了可以在服務(wù)器上構(gòu)建固件的容器,下一步就是自動(dòng)化代碼度量報(bào)告。分析源代碼中的問題有很大的價(jià)值。它幫助你跟蹤你的進(jìn)度,以及許多問題,這些問題通常不會(huì)被發(fā)現(xiàn),除非進(jìn)行手工代碼審查。
例如,每個(gè)團(tuán)隊(duì)都努力遵循一個(gè)編碼標(biāo)準(zhǔn),這樣所有的代碼看起來都一樣。我們創(chuàng)建編碼風(fēng)格指南和各種其他流程。然而,開發(fā)人員偏離這些風(fēng)格的頻率有多高?一直都是!審查每一行代碼并確保它符合標(biāo)準(zhǔn)的工作量太大了。這就是自動(dòng)化的用武之地!
你可以設(shè)置管道,以便對(duì)軟件進(jìn)行分析。分析可以有很大的不同,比如這些內(nèi)容:
堅(jiān)持編碼風(fēng)格
功能復(fù)雜性
連接
內(nèi)聚力
代碼行
代碼覆蓋率
等等。
這個(gè)清單可以一直列下去。然后可以使用代碼度量的報(bào)告來發(fā)現(xiàn)開發(fā)代碼中的問題。大多數(shù)團(tuán)隊(duì)忽略了基本的軟件度量。不幸的是,這使得團(tuán)隊(duì)對(duì)潛在的問題和他們積累的技術(shù)債務(wù)視而不見。如果你盡早將報(bào)告構(gòu)建到你的管道中,它將為你提供及早發(fā)現(xiàn)問題并在變革成本仍然較低時(shí)修復(fù)它們所必需的洞察力。
結(jié)論
CI/CD是一種現(xiàn)代技術(shù),幾乎每個(gè)嵌入式軟件團(tuán)隊(duì)都應(yīng)該采用。如今,工具的存在使得采用變得非常經(jīng)濟(jì)。事實(shí)上,它非常容易上手,并且不需要花費(fèi)大量的時(shí)間和金錢來建立一個(gè)基本的管道。
正如我們所討論的,最好的開始方式是首先建立一個(gè)容器構(gòu)建系統(tǒng)。然后,你將能夠在管道中設(shè)置一個(gè)構(gòu)建作業(yè),以驗(yàn)證代碼至少編譯成功。此后,分析你的軟件的度量、靜態(tài)分析等等就沒有更多的工作了。
從那里,你會(huì)發(fā)現(xiàn)你已經(jīng)對(duì)你的開發(fā)過程有了很多的可視性。自動(dòng)化有助于確保你可以繼續(xù)獲得洞察力,而無需團(tuán)隊(duì)付出太多努力。
這兩個(gè)首要的技巧可以幫助你形成一個(gè)基線CI/CD過程,為你的團(tuán)隊(duì)和客戶提供大量的價(jià)值,并且可以擴(kuò)展到更復(fù)雜的自動(dòng)化形式。