在不斷發展的嵌入式系統世界中,迫切需要采用軟件領域的最佳實踐來確保及時、一致和高質量的發布。嵌入式CI/CD是幫助革新嵌入式軟件開發方式的實踐之一。
持續集成(CI)和持續部署/交付(CD)構成了現代軟件開發實踐的基礎。如果你是嵌入式開發人員,你可能聽說過這些實踐,但沒有時間采用它們并更新你的工作流。
今天是使用CI/CD和VS Code以及恩智浦SDK簡化開發系列文章的第一篇。你將了解為什么CI/CD至關重要以及如何設置Github操作隨著VS代碼擴展的NXPs MCUXpresso。我們先看看基本的CI/CD概念,并了解它們對嵌入式軟件開發人員的價值。
CI/CD在嵌入式產品開發周期中的價值
在傳統的軟件開發中,開發人員和團隊長時間隔離工作,偶爾會合并變更。結果是“合并地獄”,協調不同的代碼片段可能會花費大量時間,并有可能在代碼中引入錯誤。孤立的開發不起作用,這就是CI/CD發揮作用的地方。
持續集成強調經常集成來自不同團隊成員的代碼。每個集成都是自動構建、分析和測試的,以確保盡早發現集成缺陷。
持續部署/交付(CD)是CI的邏輯延伸。一旦你的代碼被集成和測試,它就會自動部署到生產環境中(持續部署)或為部署做好準備(持續交付),從而減少手動干預并加快發布速度。
CI/CD有可能極大地改進嵌入式軟件開發實踐。對于嵌入式開發人員來說,你會發現以下優勢:
l 加快上市時間通過定期測試和隨時部署的代碼來減少總體開發時間。
l 質量提高通過自動測試,可以減少錯誤并提高產品質量。
l 增強協作這是因為當團隊朝著一個通用的、集成的代碼庫工作時,他們更好地保持了一致。
你可能認為這些好處聽起來很棒,但是你正在編寫具有硬件依賴性的嵌入式軟件!嵌入式軟件不同,不太適合CI/CD!嗯,事實并非如此。你可以使用CI/CD管道輕松地將CI/CD應用于嵌入式軟件開發。讓我們探索一下典型的嵌入式CI/CD管道可能是什么樣子的。
嵌入式CI/CD管道概述
CI/CD管道是將軟件從開發階段轉移到生產階段的過程。典型的CI/CD管道包括自動構建、測試、分析和向最終用戶部署軟件。它是開發人員、QA和運營人員用來改善不同團隊之間的協作并獲得以下好處的工具:
l 提高軟件質量
l 減少調試花費的時間
l 降低項目成本
l 提高按時完成任務的能力
l 簡化軟件部署流程
CI/CD不應被視為開發運維流程中唯一必要的組成部分。它只是一個工具。例如,你可能會發現類似下面圖1的整體DevOps流程。如你所見,該流程規劃了開發新軟件功能、測試它們以及將它們部署到現場的交互。
圖1:嵌入式DevOps交付管道流程示例
圖1中隱藏的是CI/CD管道。典型的CI/CD管道包括三個簡單的活動:
l 建筑物
l 測試
l 部署
從概念上講,管道很簡單,但細節經常讓開發人員感到困惑。例如,如果要列出構成CI/CD管道的各種組件,將包括以下內容:
l 倉庫–為構建提取源代碼的位置。(可能一個或多個)。
l 自動化構建系統–通常是可以自動構建軟件的容器化系統。
l 自動化測試–包括單元、集成、系統和回歸測試。
l 靜態代碼分析–軟件分析,包括對照編碼標準、度量分析、語言正確性等進行檢查
l 硬件仿真/模擬–使用虛擬硬件測試和驗證軟件的正確性。
l 部署機制–一種在產品成功通過所有自動測試和手動檢查后向產品交付新固件的方法。
l 監測和報告–監控進度和報告軟件狀態以及可能需要調查的任何問題的機制。
l 證券分析–分析以識別安全漏洞并確保系統受到保護。(安全性可以進行靜態分析,但我認為值得單獨列出,因為它很容易被忽略)。
要實現這些功能,并對其進行配置將是大量的工作。實施你自己的CI/CD解決方案需要深謀遠慮和時間投入,但是該解決方案應該是什么樣的呢?每個團隊都有自己的需求,但所有CI/CD管道都有一些標準功能。讓我們來看看幾個領域,并為嵌入式開發人員定義一個通用的CI/CD管道。
定義典型的嵌入式管道
典型的嵌入式CI/CD管道將根據你團隊的需求而變化。雖然你可以進行大量定制,但第一輪CI/CD管道至少應包含以下內容:
l 建設–構建作業將獲取你的固件并生成發布二進制文件。
l 分析–分析構建作業將靜態分析你的代碼。典型的分析將包括圈復雜度、代碼度量和代碼標準遵守情況,如樣式指南、MISRA和/或CERT。
l 測試–測試工作將執行運輸產品所需的所有測試。你可能包括單元、功能、集成、系統和性能測試。
l 報告–報告作業將從以前的作業中收集結果,以提供有關構建成功、分析結果、測試覆蓋率和結果等信息。
l 合并–當所有作業成功時,合并作業會將新功能合并到部署分支中。這里經常有一個人為因素,但這也可以自動化。
l 部署–合并作業成功完成后,部署作業將運行并啟動現場部署流程。部署通常與車隊部署軟件進行交互,該軟件可以將固件推送到現場設備。
如果你將管道可視化,你會發現它如圖2所示。使用這種典型流程的開發人員會將代碼提交給他們的版本控制系統(VCS)并生成一個拉請求。一個自動構建系統,即CI服務器,會自動獲取最新的代碼并構建軟件。此外,根據管道的設置方式,自動測試和分析將在構建過程成功完成后進行。如果測試成功通過,代碼將被部署到生產或試運行環境中以供進一步審查。
圖2:一個理想的CI/CD管道,結合了構建和部署現代嵌入式軟件所需的基本工作。
行業工具:CI/CD工具集
當你探索工具領域時,你會發現許多工具可幫助你構建嵌入式CI/CD管道。這些工具從涵蓋CI/CD渠道一小部分的工具到完整的集成解決方案。最受歡迎的工具包括:
l 像Git這樣的版本控制系統
l 像Make和CMake這樣的構建工具
l 像Jenkins、Travis CI和CircleCI的CI服務器
l 像Docker和Kubernetes這類能幫助一致地復制環境并支持管道作業執行的集裝箱化工具。
除了這些工具之外,像GitHub和GitLab這樣的集成平臺將所有這些功能打包到一個解決方案中。你選擇的確切平臺或工具組合將取決于你和你團隊的需求。
結論
盡管CI/CD通常與web和軟件應用程序相關聯,但它為嵌入式系統領域提供了不可否認的優勢。使用恩智浦SDK等平臺和VS Code等多功能ide可以徹底改變嵌入式開發人員的產品開發方式。