單頁應(yīng)用程序中智能DevOps的五種策略
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。
DevOps在開發(fā)生命周期中起著不可或缺。大多數(shù)前端框架都配有如Webpack一般的模塊捆綁器,以負(fù)責(zé)繁重的工作。但是,我們?nèi)匀恍枰?guī)劃如何連接捆綁持續(xù)集成(CI)和持續(xù)交付(CD)環(huán)境的前端工具。
本文關(guān)注5種能在單頁應(yīng)用程序中使用DevOps的策略。
1. 減少環(huán)境配置
當(dāng)使用React、Angular和Vue創(chuàng)建單個(gè)頁面應(yīng)用的結(jié)構(gòu)時(shí),常規(guī)操作是每個(gè)環(huán)境使用單獨(dú)的配置文件。通常,開發(fā)、生產(chǎn)等使用一個(gè)環(huán)境配置。若每個(gè)環(huán)境彼此不同,便有多個(gè)配置文件。
但是,在本應(yīng)使用不同捆綁配置情況下,若開發(fā)和生產(chǎn)只使用兩個(gè)配置,而其他應(yīng)用程序特定的變量,如API路徑和主機(jī)名等在生成后修改,又會(huì)怎么樣呢?通過保留這兩個(gè)配置,你可以分開本地開發(fā)配置與其余配置(生產(chǎn)、暫存和質(zhì)量保證)。
如果將Build和Release劃分為兩個(gè)管道,可以先放完整的占位符,然后反復(fù)使用Build管道來創(chuàng)建構(gòu)件。之后,根據(jù)部署環(huán)境,可以在Release管道中動(dòng)態(tài)替換這些變量。這種方法主要有兩個(gè)優(yōu)點(diǎn):
- 可將相同捆綁器推入多個(gè)環(huán)境(使用基礎(chǔ)的字符串替換),節(jié)省寶貴構(gòu)建時(shí)間。
- 掌握對(duì)捆綁器所做的確切更改,特別是在特定環(huán)境中。
2. 設(shè)置質(zhì)量門
在Pull Request合并到開發(fā)分支之前,先構(gòu)建前端的做法很常見。
質(zhì)量門的概念連接著Pull Request構(gòu)建,你可以在其中設(shè)置其他步驟(或門)以確保質(zhì)量。例如,可以用一個(gè)構(gòu)建步驟來用linter執(zhí)行操作,以確保修改或添加的任何代碼與已經(jīng)遵循的代碼樣式?jīng)]有任何偏差。做完這步后,可以用SonarCloud等高級(jí)代碼質(zhì)量工具來進(jìn)行質(zhì)量檢查,通過詳細(xì)的見解向Pull Request本身提供反饋。
你或許會(huì)問,為什么在簽入代碼之前就不進(jìn)行IDE級(jí)別的這些代碼質(zhì)量評(píng)估?是的,在IDE級(jí)別進(jìn)行這些評(píng)估(如果有可用的IDE插件)很重要,這能避免花時(shí)間在反饋周期上。但是,保證質(zhì)量以進(jìn)行整體代碼質(zhì)量管理同樣重要。
圖源:unsplash
3. 緩存程序包安裝
NPM軟件包安裝占很大一部分端構(gòu)建的執(zhí)行時(shí)間。重復(fù)構(gòu)建時(shí),由于很少更改外部依賴項(xiàng),很難改善這個(gè)情況。
改進(jìn)后,你可以設(shè)置一個(gè)緩存步驟來緩存這些依賴項(xiàng)。在特定的DevOps平臺(tái)(例如AzureDevOps)中,預(yù)定義的步驟可以執(zhí)行此操作。但是,如果無法在DevOps平臺(tái)中找到它,可以基于package.json內(nèi)容創(chuàng)建一個(gè)哈希函數(shù),并將其用作緩存鍵來執(zhí)行相同的操作。
4. 尋找并行性
在某些情況下,當(dāng)在DevOps管道上構(gòu)建Web應(yīng)用程序時(shí),需要同時(shí)構(gòu)建前端和后端。由于大多數(shù)DevOps平臺(tái)都使用代理支持并行性,因此,可以將前端構(gòu)建和后端劃分為不同的代理。借此,完成構(gòu)建所需的時(shí)間便減少了。
如果將DevOps步驟劃為Build和Release管道,甚至可以在Release管道上組合前端和后端構(gòu)建構(gòu)件(前提是兩者都部署到同一服務(wù)器上)。
此外,即使在構(gòu)建管道中,還可以用其他步驟來執(zhí)行并行操作。重要的是,嘗試使用并行性進(jìn)行各種優(yōu)化,并評(píng)估其對(duì)整體DevOps的影響,以根據(jù)經(jīng)驗(yàn)教訓(xùn)進(jìn)行改進(jìn)。
5. 自動(dòng)化測(cè)試的有效執(zhí)行
最后,我想采取一個(gè)關(guān)鍵步驟,需要在DevOps管道中進(jìn)行設(shè)置。盡管最好是在Pull Request級(jí)別執(zhí)行這些步驟(在開發(fā)人員的設(shè)備上更佳),但需要根據(jù)測(cè)試執(zhí)行時(shí)間來確定正確的執(zhí)行位置。
例如,作為質(zhì)量門的一部分,在Pull Request構(gòu)建時(shí)執(zhí)行單元測(cè)試是一種常見的做法。但是,如果執(zhí)行要花幾分鐘時(shí)間(常事),則在此級(jí)別上運(yùn)行E2E測(cè)試可能會(huì)成為一筆開銷。因此,評(píng)估情況并決定在不同級(jí)別運(yùn)行E2E測(cè)試用例至關(guān)重要。
圖源:unsplash
如你所見,我們可以對(duì)DevOps進(jìn)行不同的改進(jìn),以提高效率并提升應(yīng)用程序的整體質(zhì)量。此外,其中的一些技術(shù)同樣適用于后端。
雖然本文只討論了五種策略,但是這些策略的方向可能會(huì)有助于進(jìn)一步改進(jìn)管道,以提高其性能(如根據(jù)構(gòu)建步驟在各個(gè)級(jí)別進(jìn)行緩存的技術(shù))。
但還需要注意的是,每項(xiàng)改進(jìn)都需要付出一定的代價(jià)。如果使用相同的緩存示例則應(yīng)該知道,即使你指定NPM依賴項(xiàng)的自動(dòng)更新小補(bǔ)丁,也有可能不使用庫的最新更新。最后,希望這些步驟將有助于你更好地使用DevOps并改善現(xiàn)有管道。
