自動化流水線在CI/CD(持續集成/持續交付或持續部署)的實踐中發揮著核心作用。本文將對什麼是CI/CD流水線、如何構建CI/CD流水線進行討論。 *持續集成:Continuous Integration *持續交付:Continuous Delivery *持續部署:Continuous Depl ...
自動化流水線在CI/CD(持續集成/持續交付或持續部署)的實踐中發揮著核心作用。本文將對什麼是CI/CD流水線、如何構建CI/CD流水線進行討論。
*持續集成:Continuous Integration
*持續交付:Continuous Delivery
*持續部署:Continuous Deployment
01.什麼是CI/CD流水線?
CI/CD通過頻繁對更新的代碼進行檢查與嚴格測試並及時處理反饋,從而在保證軟體質量的前提下縮短交付所需時間。一般來說,可以通過不同的工具實現分階段的CI/CD,從而實現整體的工作流,但該流程極易被不可避免的人工干預打斷。因此,建立CI/CD流水線是很有必要的。
CI/CD流水線是指將開發直至部署的整體生態鏈的每一個步驟都通過流水線串聯起來並代碼化,使得開發流程能夠通過自動化流水線的形式變得更為高效、快速:只需將本地代碼發佈到測試環境,就可根據流水線走向判斷是否出現Bug併進行修正。
自動化的CI/CD流水線可以加快開發流程並加速各方反饋迴圈,確保每個步驟的執行始終如一,使軟體自動、快速、持續的交付更加輕鬆。
02.如何構建CI/CD流水線
CI/CD流水線的最終形態取決於實際的產品類型及要求,但所有流水線使用的模式大致相同。
▲CI/CD流水線模式
在CI/CD流水線中,結果會被自動記錄並反饋通知給開發人員,使其能夠按需對工作流進行配置,以便快速重啟因故障而停止的進程,並通過測試策略配置(只有前面的測試成功通過後,才會運行更複雜的測試)來更有效地利用伺服器資源。完成自動化測試後,軟體通常會被部署在一系列的暫存環境中,一些被用於最終的功能測試,另一些被用於培訓和客戶演示等。
讓我們更詳細地瞭解一下每個階段的註意事項。
03.標誌和分支
代碼提交是CI/CD流水線的第一步,指將整個代碼庫放入版本控制系統(Version Control System,VCS)中,如Git、Mercurial或Perforce,開發團隊的每個成員都應養成即刻或頻繁提交自己代碼的習慣。
即刻或頻繁提交代碼是CI/CD流水線中的重要實踐步驟,但對於周期較長的大型開發項目來說,這其實是一柄雙刃劍:雖然可以快速得到新增代碼的反饋、減少影響進度的問題出現可能性,但由於流水線的末端是客戶,所以必須採取手段以避免客戶接觸到半成品功能或共用工作狀態。
功能標誌和分支可以解決這一問題。開發人員可以設置功能標誌以區分代碼可見環境,並指定僅團隊內部可見。功能分支指從主幹中剝離出共用分支進行單獨的功能開發,最終還是會觸發CI/CD流水線,這既能滿足開發需求,又可享受CI/CD帶來的便利。
04.構建和測試
在完成代碼提交並完成實例執行後,下一個階段便是構建和測試。如果有現成的自動化單元測試,通常會在此之前進行靜態分析檢查。
具體使用的構建工具(如Ant、Maven)及構建步驟取決於項目所使用的語言及框架。為避免因缺少依賴項而出現經典的“只能在我的電腦上工作”的情況,可以使用專用的構建伺服器,通過將生成的安裝包、二進位文件和一些編譯中間件部署到測試環境,並與流水線結合,即可進行更高級別的自動化測試:單元測試、集成測試、端到端測試甚至非功能測試都可同步運行。這不僅能夠縮短流水線耗時,還能實現更快的反饋迴圈。
05.虛擬機
想要保證自動化測試的結果準確可靠,必須確保測試流程的穩定性與一致性。
理想情況下,測試環境的配置應儘可能接近實際運行環境,併在測試運行時重置相關環境,以避免環境不一致導致測試結果有誤。長期以來,虛擬機 (Virtual Machine,VM) 一直是運行測試環境的常用選擇,常見的虛擬機有VMware、VirtualBox等。虛擬機既能模擬出與當前操作系統不同的運行環境,又能避免破壞性指令導致的系統受損。有些虛擬機甚至還具備快照功能,可以快速回到破損前狀態。
然而,構建新的虛擬機需要經歷依賴項的配置過程,細節極易被遺漏,從而影響構建過程。只要將代碼打包到容器即可避免疏漏產生。容器具備高可移植性,是應用程式層的抽象,指將代碼和依賴項打包到一起,更易於部署到不同的環境中,有助於確保流水線的高效運行。
06.部署
當代碼來到CI/CD流水線的部署步驟時,開發人員可以選擇手動部署或自動部署。手動部署(持續交付)可以控制新特性或新功能的發佈時間,部署過程涉及用戶的停機時間。而使用完全自動化的持續部署,新增代碼更改只需通過CI/CD流水線先前的所有階段,便會直接被部署。這意味著,之前因開發人員數量、提交頻率等因素受限的部署次數可以達到之前難以想象的每天數十次甚至上百次。
07.總結
CI/CD獲得認可的根本原因在於其實現了測試階段的左移,而構建CI/CD流水線則可更好地將其付諸實踐。根據實際的產品和框架來構建合適的CI/CD工作流,並選擇最能滿足配置需求的CI/CD平臺,對CI/CD工作流的實現大有助益。
SkyEye天目全數字實時模擬軟體,通過虛擬化技術模擬晶元,可以在PC機上運行嵌入式目標程式,減少搭建硬體測試環境的成本,使測試階段左移,從而縮短嵌入式軟體交付的開發周期。其內置的命令行工具可以控制模擬的運行與停止,與CI/CD平臺有著良好的可集成性。此外,SkyEye還提供豐富的自動化測試函數庫,提供記憶體和全局變數的查看及修改等功能,併在自動化測試完成後生成自動化測試報告,是嵌入式領域CI/CD實踐的最佳拍檔。
參考鏈接
https://www.jetbrains.com/teamcity/ci-cd-guide/ci-cd-pipeline/
原文鏈接:https://mp.weixin.qq.com/s/x5VOBZF0plfJyyR5zpoWkw