容器是一種不斷發展的標準化便攜式包裝技術,今天,我們也看到它們在嵌入式行業中被采用。容器在軟件開發的任何階段為嵌入式開發、測試、登臺和生產提供了相同環境的快速復制,從而提高了整體生產力、代碼質量、減少了勞動力、節約了成本等。
有了容器,組織及其供應商發現了驚人的敏捷性、靈活性和可靠性。公司使用容器來:
l 縮短軟件開發上市時間。
l 提高代碼質量興趣。
l 應對管理日益復雜的發展生態系統的挑戰。
l 在快速和不斷發展的市場中動態地響應軟件交付試驗。
容器技術
開放容器倡議(OCI)是一個Linux基金會項目,由多家公司于2015年成立,旨在圍繞容器格式和運行時創建一個開放的行業標準。該標準允許兼容容器在所有主要操作系統、硬件、CPU架構、公共/私有云等中無縫移植。
容器是與其他組件或依賴項(如二進制文件或特定語言運行庫和配置文件)綁定的應用程序。容器有自己的進程、網絡接口和裝載。它們彼此隔離,并運行在“容器引擎”之上,便于攜帶和靈活。此外,容器共享一個操作系統,它們可以在以下任何一個上運行。
l Linux、Windows和Mac操作系統
l 虛擬機或物理服務器
l 嵌入式開發人員的機器或本地數據中心
l 公共云
理解容器引擎的作用很重要,因為它提供了關鍵的功能,如:
操作系統級虛擬化。
容器運行時管理容器的生命周期(執行、監督、圖像傳輸、存儲和網絡附件)。
內核命名空間來隔離資源。
還有各種容器引擎,包括:Docker、runC、CoreOS rkt、LXD、CRI-O、Podman、Containerd、微軟Hyper-V、LXC、谷歌容器引擎(GKE)、亞馬遜彈性容器服務(ECS)等等。
其他值得一提的概念是容器映像和容器編排。
容器映像是一個帶有可執行代碼的靜態文件,包含了容器運行所需的一切。因此,容器是容器映像的運行實例。此外,在大型復雜部署中,容器化架構中可能有許多容器。管理所有容器的生命周期變得尤為重要。
容器編排通過供應、部署、擴展或縮減等方式管理工作負載和服務。在嵌入式開發中,流行的容器編排解決方案有Kubernetes、Docker swarm和Marathon。
現在,讓我們考慮一下將應用程序與所有依賴項打包在一起的靈活性所帶來的技術和業務收益,以便它們可以快速可靠地從一個計算環境運行到另一個環境。
技術和業務收益
嵌入式軟件系統的開發生態系統可能過于復雜。讓大型團隊都在一個公共或相同的環境中工作會增加復雜性。例如,開發團隊環境包括編譯器、SDK、庫、IDE,在某些情況下,還包括人工智能(AI)等現代技術。所有這些工具和解決方案都協同工作,它們的所有依賴項也是如此,加上不斷發展的發布版本,這些版本提供了對已發現的安全漏洞的修復、對已識別缺陷的修復、許可等等。
此外,組織應該為開發、測試/驗證、生產以及可能的災難恢復提供單獨的環境。有了容器,組織可以通過輕松地擴大或縮小應用程序依賴關系、將開發環境恢復到特定狀態以及根據需要推出容器映像來有效地管理所有這些復雜的開發環境,從而確保每個嵌入式開發團隊成員都獲得一致的開發環境。今天,許多組織在每臺開發人員/測試人員機器上復制開發和測試環境,為人為錯誤留下了空間。
嵌入式部署策略
使用容器的軟件開發可以通過多種方式進行配置和部署。組織可以根據使用的現有工具、期望的自動化水平和團隊組織來決定和發展容器的使用。
策略可以是在開發人員的主機上使用一個公共容器來制作、構建和運行他們的應用程序。這確保了每個開發人員都使用完全相同的構建工具集和版本以及運行環境。
許多嵌入式團隊雇傭Jenkins、GitHub、Azure、GitLab和其他人進行持續集成和持續交付(CI/CD)。在這個例子中有兩個容器。一個容器制作和構建應用程序,而另一個容器運行應用程序。這有助于表達容器提供的靈活性。
組織也可能有圖形化分布的團隊。擁有容器圖像庫有助于共享容器,并消除重復勞動。這通過將現有的容器用于不同的目的來提高效率。共享容器確保了整個開發供應鏈的質量。
CI/CD管道中的嵌入式測試自動化
在嵌入式開發中,容器也被用于DevOps工作流中的軟件測試。通過將容器化的測試解決方案集成到CI/CD管道中,組織可以執行靜態分析,以確保符合MISRA C:2012、MISRA C++ 202x、AUTOSAR C++14、CERT、CWE、OWASP等標準。
像Parasoft C/C++test這樣的軟件測試自動化工具提供了一個可以在Docker Hub中找到的容器。此外,還可以執行單元測試,包括語句的結構代碼覆蓋、分支和/或修改的條件決策覆蓋(MC/DC)。然后,只有在成功完成測試之后,軟件才會被提交到主分支。
構建過程中的容器化部署在代碼開發和代碼質量方面產生了驚人的效率。讓多名工程師在這個快速、自動化的持續集成周期中并行工作,可以確保在整個產品生命周期中生成和維護一個堅實的軟件基礎。
結論
構建嵌入式實時安全和安全關鍵系統的組織正在采用包含容器的DevOps工作流。其他公司正在采用集裝箱化戰略。那些已經構建了CI/CD管道并且已經使用了幾年的公司報告說,他們已經能夠更好地預測軟件的交付,并且容易地適應需求和設計的變化。隨著生產率的提高和測試成本的降低,嵌入式開發團隊報告了產品質量和上市時間的提高。