容器是一種不斷發展的標準化和便攜式包裝技術。它們最初是為 Web 應用程序和微服務開發和部署而引入的,在 IT 行業中得到了廣泛的采用。
今天,我們也看到它們被應用于嵌入式行業,例如汽車電子控制單元(ECU)的開發。這適用于自適應 AUTOSAR 和經典 AUTOSAR,適用于深度嵌入式安全和安保關鍵系統,其中 C 和 C++ 是主要的編程語言。
容器可在軟件開發的任何階段為嵌入式開發、測試、暫存和生產提供相同環境的快速復制,從而提高整體生產力、代碼質量、減少勞動力、節省成本等。
借助容器,組織及其供應商發現了驚人的敏捷性、靈活性和可靠性。公司使用容器來:
縮短軟件開發上市時間。
提高代碼質量興趣。
應對管理日益復雜的開發生態系統方面的挑戰。
在快速且不斷發展的市場中動態響應軟件交付試驗。
正在使用的一個例子是如何將容器直接部署到當今的現代敏捷開發工作流中,如DevOps / DevSecOps。
在進入細節和好處之前,讓我們將這項技術放在上下文中并回答以下問題。
為什么存在容器,它們是什么?
容器如何適應軟件開發生命周期?
它們如何影響業務成果?
容器技術
開放容器計劃(OCI)是一個Linux基金會項目,由多家公司于2015年建立,旨在圍繞容器格式和運行時創建開放的行業標準。該標準允許兼容的容器在所有主要操作系統、硬件、CPU 架構、公共/私有云等中無縫移植。
容器是與其他組件或依賴項(如二進制文件或特定語言運行時庫和配置文件)捆綁在一起的應用程序。容器有自己的進程、網絡接口和掛載。它們彼此隔離,并在“容器引擎”之上運行,便于攜帶和靈活。
此外,容器共享一個操作系統。它們可以在以下任一設備上運行。
Linux、Windows 和 Mac 操作系統
虛擬機或物理服務器
開發人員的計算機或本地數據中心
公共云
圖 1:容器化架構
了解容器引擎的作用很重要,因為它提供了以下關鍵功能:
操作系統級虛擬化。
容器運行時,用于管理容器的生命周期(執行、監督、映像傳輸、存儲和網絡附件)。
用于隔離資源的內核命名空間。
還有各種容器引擎,包括:Docker,runC,CoreOS rkt,LXD,CRI-O,Podman,Containerd,Microsoft Hyper-V,LXC,Google Container Engine (GKE),Amazon Elastic Container Service(ECS)等。
其他值得一目了然的概念是容器映像和容器業務流程。
容器映像是具有可執行代碼的靜態文件,包含容器運行所需的所有內容。因此,容器是容器映像的運行實例。此外,在大型復雜部署中,容器化體系結構中可能有許多容器。管理所有容器的生命周期變得尤為重要。
容器編排通過預配、部署、縱向擴展或縮減等方式管理工作負載和服務。流行的容器編排解決方案是Kubernetes,Docker群和Marathon。
現在,讓我們考慮一下將應用程序與其所有依賴項打包在一起的靈活性帶來的技術和業務收益,以便它們從一個計算環境快速可靠地運行到另一個計算環境。
技術和業務收益
嵌入式軟件系統的開發生態系統可能過于復雜。讓大型團隊都在通用或相同的環境中工作,這增加了復雜性。例如,開發團隊環境由編譯器、SDK、庫、IDE 組成,在某些情況下,還包括人工智能 (AI) 等現代技術的結合。所有這些工具和解決方案都在協同工作,它們的所有依賴項也是如此,以及不斷發展的發布版本,這些版本提供對發現的安全漏洞的修復、對已識別缺陷的修復、許可等等。
此外,組織應該有單獨的環境用于開發、測試/驗證、生產,也許還有災難恢復。借助容器,組織可以通過輕松擴展或縮減應用程序依賴項、將開發環境恢復到特定狀態以及根據需要推出容器映像來有效地管理所有這些復雜的開發環境,從而確保每個團隊成員都能獲得一致的開發環境。如今,許多組織在每臺開發人員/測試人員計算機上復制開發和測試環境,為人為錯誤留有余地。
我記得有一次我在桌面上開發和測試了一個嵌入式應用程序,它運行良好,所以我提交了代碼。很久以后,QA 團隊在驗收測試期間通知我該應用程序不起作用。我開始調試報告的問題,但無法產生所描述的問題。
我讓其他開發團隊成員參與進來,以幫助識別和解決問題,但我們就是無法重現問題。經過幾天的調查,與QA團隊合作,有時抓住稻草,我們終于開始調查QA的構建環境。
一切都是相同的,除了QA團隊更新了他們機器上的操作系統(OS)和編譯器版本。在他們的操作系統版本中,對任務優先級處理進行了修改。代碼邏輯是合理的,但正在運行的任務被具有相同優先級的另一個任務阻止。將競爭任務優先級中的任何一個減少一個都可以解決問題。
由于代碼邏輯是第一個疑似罪魁禍首,因此我們花費了大量人力和時間來調查和解決問題。調查問題需要更多開發和 QA 工程師花費更多時間。我們舉行了額外的會議和狀態報告,并推遲了其他任務。漣漪效應尚不完全清楚,但產生了巨大的成本。如果已經使用容器對開發環境進行集中管理和部署,它將使開發和 QA 團隊的部署環境保持同步,并且可以完全避免此問題。
嵌入式部署策略
可以通過多種方式配置和部署使用容器的軟件開發。組織可以根據正在使用的現有工具、所需的自動化級別和團隊組織來確定容器的使用并不斷發展。
策略可以是在開發人員的主機上使用公共容器來制作、構建和運行其應用程序。這可確保每個開發人員都使用完全相同的構建工具和運行環境的集合和版本。
許多嵌入式團隊使用 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 管道并已經使用它幾年的公司報告說,他們已經能夠更好地預測軟件的交付,并輕松適應需求和設計的變化。
隨著生產力的提高和測試成本的降低,開發團隊報告說產品質量和上市時間都有所提高。此外,嵌入式組織已通知我們 QA 問題報告和客戶票證的可衡量下降。
審核編輯:郭婷
-
嵌入式
+關注
關注
5072文章
19026瀏覽量
303518 -
Web
+關注
關注
2文章
1257瀏覽量
69368 -
操作系統
+關注
關注
37文章
6747瀏覽量
123204
發布評論請先 登錄
相關推薦
評論