作者:喬納森·巴特利特(Jonathan Bartlett),美國沃爾特·布拉德利自然與人工智能中心(WALTER BRADLEY CENTER FOR NATURAL & ARTIFICIAL INTELLIGENCE)高級研究員
Jonathan Bartlett 是 Specialized Bicycle Components (美國美國公司,設(shè)計、制造和銷售自行車、自行車零部件及相關(guān)產(chǎn)品,品牌為“Specialized”。)的高級軟件研發(fā)工程師,他專注于解決跨多個軟件團(tuán)隊的問題。此前,他是 ITX 的高級開發(fā)人員,為美國各地的公司開發(fā)應(yīng)用程序。他還擔(dān)任布萊斯研究所所長,專注于數(shù)學(xué)、哲學(xué)、工程和科學(xué)之間的相互作用。喬納森是多本教科書和編輯書籍的作者,這些教科書和編輯書籍已被普林斯頓大學(xué)和德弗里大學(xué)等多所大學(xué)使用。
在規(guī)模較小的開發(fā)組織中,軟件的構(gòu)建流程往往被忽視。如果您不是軟件開發(fā)人員,那么構(gòu)建流程就是將源代碼創(chuàng)建成最終軟件包并交付給客戶(或服務(wù)器)的一系列步驟。
多年來,大型企業(yè)一直在實現(xiàn)構(gòu)建流程的自動化,原因很簡單,構(gòu)建流程必須適用于眾多軟件開發(fā)人員。它必須每次都能在每個人的機(jī)器上運(yùn)行,并產(chǎn)生可靠的結(jié)果。 因此,將這一流程傳達(dá)給每個人所需的文檔量與簡單地將其自動化之間的差距并不大。然而,在規(guī)模較小的組織中,人們很容易將過程自動化視為不必要的開銷而繞過它。這種邏輯是這樣的--如果只有 Sam 負(fù)責(zé) X 產(chǎn)品,那么就只有他需要構(gòu)建 X 產(chǎn)品。只要構(gòu)建系統(tǒng)能讓 Sam 輕松工作,這就足夠了。不過,即使是對單個開發(fā)人員的組織而言,構(gòu)建過程自動化也能帶來許多優(yōu)勢。下面,我將向您介紹這種流程的組成部分,以及為什么它們對任何規(guī)模的開發(fā)組織都很重要。
雖然構(gòu)建自動化構(gòu)建流程有多種方法,但每個構(gòu)建流程都始于版本控制的源代碼。頻繁提交的版本控制軟件應(yīng)該是每個開發(fā)組織的基石。自動構(gòu)建流程只能直接從版本控制的源代碼庫中構(gòu)建。這將迫使開發(fā)人員使用該系統(tǒng),并確保所有構(gòu)建的代碼都已正確檢查到源代碼庫中。我曾多次遇到過這樣的情況,開發(fā)人員在發(fā)布產(chǎn)品時忘記提交代碼,而我不得不追查這些代碼。我不得不搜索已離開組織的開發(fā)人員的備份硬盤,以找到實際交付的代碼。此外,當(dāng)代碼必須在構(gòu)建之前提交時,就意味著你可以可靠地找到哪些版本的代碼進(jìn)入了哪些版本。錯誤是在 3.5.1 版和 3.5.2 版之間引入的嗎?如果是在版本控制系統(tǒng)中構(gòu)建的,那么獲取這兩個版本之間的所有變更列表就輕而易舉了。
自動構(gòu)建流程所需的下一個要素是構(gòu)建流程本身。 這是實際執(zhí)行構(gòu)建的腳本或腳本集合。有了自動化流程,開發(fā)人員就必須明確寫下構(gòu)建流程所需做的所有事情。我不知道有多少次,開發(fā)人員告訴我 "構(gòu)建流程很簡單",但實際上卻需要執(zhí)行一個或多個非標(biāo)準(zhǔn)步驟。 自動構(gòu)建流程意味著開發(fā)人員必須將所有這些步驟寫入腳本,這樣就很容易檢查了。
標(biāo)準(zhǔn)化環(huán)境
構(gòu)建流程的另一個重要方面是擁有標(biāo)準(zhǔn)化的環(huán)境。兩個開發(fā)人員可以擁有相同的代碼,運(yùn)行相同的構(gòu)建步驟,但一個開發(fā)人員可以編譯,另一個卻不行。是開發(fā)工具的版本錯誤?錯誤的 Windows 版本?是否有某個開發(fā)人員安裝了某些東西,而另一個開發(fā)人員沒有?通過 Docker 等工具,您可以創(chuàng)建甚至擁有一個精確的構(gòu)建環(huán)境配方。使用 Docker 來運(yùn)行構(gòu)建環(huán)境,不僅可以指定(和版本控制)構(gòu)建環(huán)境所需的確切組件,還可以創(chuàng)建一個逐位的構(gòu)建系統(tǒng)映像。這樣,代碼是如何構(gòu)建的就不會含糊不清了。例如,假設(shè) 2.1.1 版本存在安全漏洞,但您正在發(fā)布 5.6.2 版本。很多時候,開發(fā)環(huán)境已經(jīng)發(fā)生了很大變化,您甚至不記得 2.1.1 版需要安裝哪些工具。但是,如果您使用 Docker 作為自動構(gòu)建系統(tǒng)的一部分,那么每個版本的整個工具鏈都會記錄在案。
最后是版本控制過程本身。開發(fā)過程中一項惱人的任務(wù)就是確保正確的版本號附在代碼上。這項工作可以通過自動構(gòu)建系統(tǒng)實現(xiàn)自動化。我通常會這樣設(shè)置我的構(gòu)建系統(tǒng):用一個特定格式的標(biāo)簽(如 release-1-2-3)標(biāo)記版本庫的版本,就能完成多個重要步驟。首先,它會促使自動構(gòu)建過程將版本信息設(shè)置為 1.2.3。這通常由 shell 腳本完成,腳本會修改代碼中的一些常量來設(shè)置版本信息。此外,自動構(gòu)建流程工具通常也有一個構(gòu)建編號,也可以使用。其次,我通常會讓自動構(gòu)建流程將生成的代碼存儲在一個特殊的位置,而這個位置本身就有版本信息。例如,如果是網(wǎng)絡(luò)應(yīng)用程序,我可能會構(gòu)建一個 Docker 鏡像,并將其存儲在一個 Docker 存儲庫中,該存儲庫也會標(biāo)記版本信息。
那么,要開始進(jìn)行自動化構(gòu)建,你需要哪些工具呢?事實上,這些工具都是現(xiàn)成的。 大多數(shù)版本控制軟件中都嵌入了此類工具。Github 有 "Github Actions",Bitbucket 有 "Bitbucket Pipelines"。還有一些其他工具,如 CircleCI,可以連接到你的版本庫,執(zhí)行類似的功能。如果你想自己管理,可以使用開源工具 Jenkins。就我個人而言,我使用 Bitbucket Pipelines 的經(jīng)驗最多,而且非常滿意。
自動構(gòu)建流程有一個很酷的功能,那就是可以在沒有電腦和合適工具的情況下做一些小改動。由于自動構(gòu)建流程具備執(zhí)行構(gòu)建所需的一切功能,因此您實際上可以通過網(wǎng)絡(luò)直接在版本庫中進(jìn)行簡單的更改,然后讓自動構(gòu)建系統(tǒng)構(gòu)建最終產(chǎn)品。雖然這并不是自動構(gòu)建流程最令人興奮的結(jié)果,但如果開發(fā)人員無法訪問自己的電腦時需要進(jìn)行一些小改動,自動構(gòu)建流程有時就會派上用場。
持續(xù)集成/部署
自動化構(gòu)建還允許執(zhí)行對開發(fā)團(tuán)隊非常有益的其他任務(wù),即 CI/CD。CI/CD 是 "持續(xù)集成/持續(xù)部署 "的縮寫,是可以添加到自動化構(gòu)建流程中的兩項任務(wù)。持續(xù)集成指的是在自動構(gòu)建過程中自動執(zhí)行測試并報告測試結(jié)果的能力。這樣做的目的是對開發(fā)流程進(jìn)行檢查,確保至少在某些分支上,開發(fā)人員不會檢入導(dǎo)致測試失敗的代碼,從而給項目中的其他開發(fā)人員帶來問題。基本上,它可以持續(xù)測試開發(fā)人員的協(xié)作結(jié)果,并在出現(xiàn)問題時通知所有人。
持續(xù)部署允許您從構(gòu)建系統(tǒng)中進(jìn)行全面部署,無論是部署到網(wǎng)站還是應(yīng)用程序商店。 就我個人而言,我不喜歡構(gòu)建系統(tǒng)本身執(zhí)行部署,但我傾向于讓構(gòu)建系統(tǒng)為項目的部署做好準(zhǔn)備,這樣我只需點擊一個按鈕或執(zhí)行一個命令就能讓一切正常運(yùn)行。例如,對于發(fā)布到亞馬遜網(wǎng)絡(luò)服務(wù)(Amazon Web Services)的網(wǎng)絡(luò)項目,我喜歡讓持續(xù)部署流程為生成的網(wǎng)絡(luò)應(yīng)用程序構(gòu)建一個 docker 鏡像,然后將其發(fā)送到亞馬遜的容器存儲庫(Container Repository),并標(biāo)注發(fā)布版本。然后,我只需為容器任務(wù)更改映像的名稱,就能啟動部署流程。請注意,我還將亞馬遜配置保存在版本控制中,這樣我就能記錄哪些版本在何時發(fā)布。
總之,自動化構(gòu)建流程可以實現(xiàn)開發(fā)管道的標(biāo)準(zhǔn)化和系統(tǒng)化。這就迫使開發(fā)團(tuán)隊將構(gòu)建流程的所有步驟明確化、可重復(fù)化,并對每個版本的軟件進(jìn)行審計。使用自動化構(gòu)建系統(tǒng)能迫使開發(fā)人員以 "正確 "的方式發(fā)布產(chǎn)品,而不走彎路,同時為開發(fā)人員和組織增加優(yōu)勢。無論您的開發(fā)組織是一個人還是一個大型團(tuán)隊,自動化構(gòu)建流程都能為您的組織帶來諸多好處。
2024-08-15 09:43
2024-08-15 09:37
2024-08-15 09:36
2024-08-15 09:34
2024-08-15 09:33
2024-08-15 09:33
2024-08-14 09:33
2024-08-14 09:32
2024-08-14 09:21
2024-08-14 09:21