您的位置:首頁 > 資訊 > 企業(yè)動(dòng)態(tài) > 正文

為什么構(gòu)建過程自動(dòng)化非常重要?

2023-12-25 09:15 性質(zhì):翻譯 作者:Mulan 來源:AGV
免責(zé)聲明:中叉網(wǎng)(qcxy.net.cn)尊重合法版權(quán),反對(duì)侵權(quán)盜版。(凡是我網(wǎng)所轉(zhuǎn)載之文章,文中所有文字內(nèi)容和圖片視頻之知識(shí)產(chǎn)權(quán)均系原作者和機(jī)構(gòu)所有。文章內(nèi)容觀點(diǎn),與本網(wǎng)無關(guān)。如有需要?jiǎng)h除,敬請(qǐng)來電商榷!)
作者:?jiǎn)碳{森·巴特利特(Jonathan Bartlett),美國(guó)沃爾特·布拉德利自然與人工智能中心(WALTER BRADLEY CENTER FOR NATURAL & ARTIFICIAL INTELLIGENCE)高級(jí)研究員Jonathan Bartlett...

作者:?jiǎn)碳{森·巴特利特(Jonathan Bartlett),美國(guó)沃爾特·布拉德利自然與人工智能中心(WALTER BRADLEY CENTER FOR NATURAL & ARTIFICIAL INTELLIGENCE)高級(jí)研究員

Jonathan Bartlett 是 Specialized Bicycle Components (美國(guó)美國(guó)公司,設(shè)計(jì)、制造和銷售自行車、自行車零部件及相關(guān)產(chǎn)品,品牌為“Specialized”。)的高級(jí)軟件研發(fā)工程師,他專注于解決跨多個(gè)軟件團(tuán)隊(duì)的問題。此前,他是 ITX 的高級(jí)開發(fā)人員,為美國(guó)各地的公司開發(fā)應(yīng)用程序。他還擔(dān)任布萊斯研究所所長(zhǎng),專注于數(shù)學(xué)、哲學(xué)、工程和科學(xué)之間的相互作用。喬納森是多本教科書和編輯書籍的作者,這些教科書和編輯書籍已被普林斯頓大學(xué)和德弗里大學(xué)等多所大學(xué)使用。

在規(guī)模較小的開發(fā)組織中,軟件的構(gòu)建流程往往被忽視。如果您不是軟件開發(fā)人員,那么構(gòu)建流程就是將源代碼創(chuàng)建成最終軟件包并交付給客戶(或服務(wù)器)的一系列步驟。

多年來,大型企業(yè)一直在實(shí)現(xiàn)構(gòu)建流程的自動(dòng)化,原因很簡(jiǎn)單,構(gòu)建流程必須適用于眾多軟件開發(fā)人員。它必須每次都能在每個(gè)人的機(jī)器上運(yùn)行,并產(chǎn)生可靠的結(jié)果。 因此,將這一流程傳達(dá)給每個(gè)人所需的文檔量與簡(jiǎn)單地將其自動(dòng)化之間的差距并不大。然而,在規(guī)模較小的組織中,人們很容易將過程自動(dòng)化視為不必要的開銷而繞過它。這種邏輯是這樣的--如果只有 Sam 負(fù)責(zé) X 產(chǎn)品,那么就只有他需要構(gòu)建 X 產(chǎn)品。只要構(gòu)建系統(tǒng)能讓 Sam 輕松工作,這就足夠了。不過,即使是對(duì)單個(gè)開發(fā)人員的組織而言,構(gòu)建過程自動(dòng)化也能帶來許多優(yōu)勢(shì)。下面,我將向您介紹這種流程的組成部分,以及為什么它們對(duì)任何規(guī)模的開發(fā)組織都很重要。

雖然構(gòu)建自動(dòng)化構(gòu)建流程有多種方法,但每個(gè)構(gòu)建流程都始于版本控制的源代碼。頻繁提交的版本控制軟件應(yīng)該是每個(gè)開發(fā)組織的基石。自動(dòng)構(gòu)建流程只能直接從版本控制的源代碼庫中構(gòu)建。這將迫使開發(fā)人員使用該系統(tǒng),并確保所有構(gòu)建的代碼都已正確檢查到源代碼庫中。我曾多次遇到過這樣的情況,開發(fā)人員在發(fā)布產(chǎn)品時(shí)忘記提交代碼,而我不得不追查這些代碼。我不得不搜索已離開組織的開發(fā)人員的備份硬盤,以找到實(shí)際交付的代碼。此外,當(dāng)代碼必須在構(gòu)建之前提交時(shí),就意味著你可以可靠地找到哪些版本的代碼進(jìn)入了哪些版本。錯(cuò)誤是在 3.5.1 版和 3.5.2 版之間引入的嗎?如果是在版本控制系統(tǒng)中構(gòu)建的,那么獲取這兩個(gè)版本之間的所有變更列表就輕而易舉了。

自動(dòng)構(gòu)建流程所需的下一個(gè)要素是構(gòu)建流程本身。 這是實(shí)際執(zhí)行構(gòu)建的腳本或腳本集合。有了自動(dòng)化流程,開發(fā)人員就必須明確寫下構(gòu)建流程所需做的所有事情。我不知道有多少次,開發(fā)人員告訴我 "構(gòu)建流程很簡(jiǎn)單",但實(shí)際上卻需要執(zhí)行一個(gè)或多個(gè)非標(biāo)準(zhǔn)步驟。 自動(dòng)構(gòu)建流程意味著開發(fā)人員必須將所有這些步驟寫入腳本,這樣就很容易檢查了。

標(biāo)準(zhǔn)化環(huán)境

構(gòu)建流程的另一個(gè)重要方面是擁有標(biāo)準(zhǔn)化的環(huán)境。兩個(gè)開發(fā)人員可以擁有相同的代碼,運(yùn)行相同的構(gòu)建步驟,但一個(gè)開發(fā)人員可以編譯,另一個(gè)卻不行。是開發(fā)工具的版本錯(cuò)誤?錯(cuò)誤的 Windows 版本?是否有某個(gè)開發(fā)人員安裝了某些東西,而另一個(gè)開發(fā)人員沒有?通過 Docker 等工具,您可以創(chuàng)建甚至擁有一個(gè)精確的構(gòu)建環(huán)境配方。使用 Docker 來運(yùn)行構(gòu)建環(huán)境,不僅可以指定(和版本控制)構(gòu)建環(huán)境所需的確切組件,還可以創(chuàng)建一個(gè)逐位的構(gòu)建系統(tǒng)映像。這樣,代碼是如何構(gòu)建的就不會(huì)含糊不清了。例如,假設(shè) 2.1.1 版本存在安全漏洞,但您正在發(fā)布 5.6.2 版本。很多時(shí)候,開發(fā)環(huán)境已經(jīng)發(fā)生了很大變化,您甚至不記得 2.1.1 版需要安裝哪些工具。但是,如果您使用 Docker 作為自動(dòng)構(gòu)建系統(tǒng)的一部分,那么每個(gè)版本的整個(gè)工具鏈都會(huì)記錄在案。

最后是版本控制過程本身。開發(fā)過程中一項(xiàng)惱人的任務(wù)就是確保正確的版本號(hào)附在代碼上。這項(xiàng)工作可以通過自動(dòng)構(gòu)建系統(tǒng)實(shí)現(xiàn)自動(dòng)化。我通常會(huì)這樣設(shè)置我的構(gòu)建系統(tǒng):用一個(gè)特定格式的標(biāo)簽(如 release-1-2-3)標(biāo)記版本庫的版本,就能完成多個(gè)重要步驟。首先,它會(huì)促使自動(dòng)構(gòu)建過程將版本信息設(shè)置為 1.2.3。這通常由 shell 腳本完成,腳本會(huì)修改代碼中的一些常量來設(shè)置版本信息。此外,自動(dòng)構(gòu)建流程工具通常也有一個(gè)構(gòu)建編號(hào),也可以使用。其次,我通常會(huì)讓自動(dòng)構(gòu)建流程將生成的代碼存儲(chǔ)在一個(gè)特殊的位置,而這個(gè)位置本身就有版本信息。例如,如果是網(wǎng)絡(luò)應(yīng)用程序,我可能會(huì)構(gòu)建一個(gè) Docker 鏡像,并將其存儲(chǔ)在一個(gè) Docker 存儲(chǔ)庫中,該存儲(chǔ)庫也會(huì)標(biāo)記版本信息。

那么,要開始進(jìn)行自動(dòng)化構(gòu)建,你需要哪些工具呢?事實(shí)上,這些工具都是現(xiàn)成的。 大多數(shù)版本控制軟件中都嵌入了此類工具。Github 有 "Github Actions",Bitbucket 有 "Bitbucket Pipelines"。還有一些其他工具,如 CircleCI,可以連接到你的版本庫,執(zhí)行類似的功能。如果你想自己管理,可以使用開源工具 Jenkins。就我個(gè)人而言,我使用 Bitbucket Pipelines 的經(jīng)驗(yàn)最多,而且非常滿意。

自動(dòng)構(gòu)建流程有一個(gè)很酷的功能,那就是可以在沒有電腦和合適工具的情況下做一些小改動(dòng)。由于自動(dòng)構(gòu)建流程具備執(zhí)行構(gòu)建所需的一切功能,因此您實(shí)際上可以通過網(wǎng)絡(luò)直接在版本庫中進(jìn)行簡(jiǎn)單的更改,然后讓自動(dòng)構(gòu)建系統(tǒng)構(gòu)建最終產(chǎn)品。雖然這并不是自動(dòng)構(gòu)建流程最令人興奮的結(jié)果,但如果開發(fā)人員無法訪問自己的電腦時(shí)需要進(jìn)行一些小改動(dòng),自動(dòng)構(gòu)建流程有時(shí)就會(huì)派上用場(chǎng)。

持續(xù)集成/部署

自動(dòng)化構(gòu)建還允許執(zhí)行對(duì)開發(fā)團(tuán)隊(duì)非常有益的其他任務(wù),即 CI/CD。CI/CD 是 "持續(xù)集成/持續(xù)部署 "的縮寫,是可以添加到自動(dòng)化構(gòu)建流程中的兩項(xiàng)任務(wù)。持續(xù)集成指的是在自動(dòng)構(gòu)建過程中自動(dòng)執(zhí)行測(cè)試并報(bào)告測(cè)試結(jié)果的能力。這樣做的目的是對(duì)開發(fā)流程進(jìn)行檢查,確保至少在某些分支上,開發(fā)人員不會(huì)檢入導(dǎo)致測(cè)試失敗的代碼,從而給項(xiàng)目中的其他開發(fā)人員帶來問題?;旧?,它可以持續(xù)測(cè)試開發(fā)人員的協(xié)作結(jié)果,并在出現(xiàn)問題時(shí)通知所有人。

持續(xù)部署允許您從構(gòu)建系統(tǒng)中進(jìn)行全面部署,無論是部署到網(wǎng)站還是應(yīng)用程序商店。 就我個(gè)人而言,我不喜歡構(gòu)建系統(tǒng)本身執(zhí)行部署,但我傾向于讓構(gòu)建系統(tǒng)為項(xiàng)目的部署做好準(zhǔn)備,這樣我只需點(diǎn)擊一個(gè)按鈕或執(zhí)行一個(gè)命令就能讓一切正常運(yùn)行。例如,對(duì)于發(fā)布到亞馬遜網(wǎng)絡(luò)服務(wù)(Amazon Web Services)的網(wǎng)絡(luò)項(xiàng)目,我喜歡讓持續(xù)部署流程為生成的網(wǎng)絡(luò)應(yīng)用程序構(gòu)建一個(gè) docker 鏡像,然后將其發(fā)送到亞馬遜的容器存儲(chǔ)庫(Container Repository),并標(biāo)注發(fā)布版本。然后,我只需為容器任務(wù)更改映像的名稱,就能啟動(dòng)部署流程。請(qǐng)注意,我還將亞馬遜配置保存在版本控制中,這樣我就能記錄哪些版本在何時(shí)發(fā)布。

總之,自動(dòng)化構(gòu)建流程可以實(shí)現(xiàn)開發(fā)管道的標(biāo)準(zhǔn)化和系統(tǒng)化。這就迫使開發(fā)團(tuán)隊(duì)將構(gòu)建流程的所有步驟明確化、可重復(fù)化,并對(duì)每個(gè)版本的軟件進(jìn)行審計(jì)。使用自動(dòng)化構(gòu)建系統(tǒng)能迫使開發(fā)人員以 "正確 "的方式發(fā)布產(chǎn)品,而不走彎路,同時(shí)為開發(fā)人員和組織增加優(yōu)勢(shì)。無論您的開發(fā)組織是一個(gè)人還是一個(gè)大型團(tuán)隊(duì),自動(dòng)化構(gòu)建流程都能為您的組織帶來諸多好處。

網(wǎng)友評(píng)論
文明上網(wǎng),理性發(fā)言,拒絕廣告

相關(guān)資訊

關(guān)注官方微信

手機(jī)掃碼看新聞