容器是一种不断发展的标准化便携式包装技术,今天,我们也看到它们在嵌入式行业中被采用。容器在软件开发的任何阶段为嵌入式开发、测试、登台和生产提供了相同环境的快速复制,从而提高了整体生产力、代码质量、减少了劳动力、节约了成本等。
有了容器,组织及其供应商发现了惊人的敏捷性、灵活性和可靠性。公司使用容器来:
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管道并且已经使用了几年的公司报告说,他们已经能够更好地预测软件的交付,并且容易地适应需求和设计的变化。随着生产率的提高和测试成本的降低,嵌入式开发团队报告了产品质量和上市时间的提高。