为硬件在环测试容器化构建和运行环境

Ari Mahpour
|  已创建:April 16, 2024

最近我收到了很多关于在使用持续集成系统时,如何为自动化测试容器化环境的问题。如果你不太理解那句话的大部分内容,不用担心,因为我们将深入探讨容器、Docker以及如何在嵌入式环境和硬件在环测试中利用它们。

什么是容器?

关于容器有很多优秀的文章,包括Docker的这篇(其中一个最受欢迎的容器运行时引擎)。在构建环境(即嵌入式系统)和测试环境(即硬件在环测试)中使用容器,使我们能够抽象出每次想要启动新机器时的所有繁琐设置。这不仅仅与新的测试机器相关,也与我们在云中扩展操作以构建嵌入式固件有关。

无论你正在运行什么规模的操作,如今许多公司都利用云来减少保留裸机服务器的需要。在DevOps原则中,我们总是希望确保我们编写的任何软件都可以在任何时间、任何地方构建和运行。在云中不断启动新机器并安装编译软件、库和其他软件包并不是很好的扩展方式。这正是容器化变得如此流行的原因。我们可以将我们的构建(或运行时环境)打包成一个非常轻量级的虚拟机,并将其交付给任何机器运行,无论是云还是我们自己的个人电脑。

创建和使用容器

让我们探索如何在你的项目中实际创建和使用这些容器。当我们首次开始创建一个容器镜像时,我们必须从一个现有的“基础镜像”开始。在大多数情况下,某种Linux操作系统的变体,如Debian、Ubuntu或Alpine,就足够了。一旦你创建了你的Dockerfile,你就可以这样引用镜像:

FROM ubuntu:latest

这表明基础操作系统将运行最新的Ubuntu Docker镜像。之后,我们需要安装构建或测试环境所需的任何库。在一个示例仓库中,我使用Debian包管理器(Apt)安装了Arduino IDE,然后通过安装Arduino Sam板驱动程序添加了更多层。在特权模式下运行此容器(或传入设备的卷挂载点),我可以在仅包含Docker的全新机器上(即没有IDE或驱动程序)通过命令行编译和上传Arduino草图。

我们可以对连接到我们正在测试的设备的机器做同样的事情。在我整理的这个Docker容器中,我安装了运行Analog Discovery 2设备所需的所有依赖项和软件。理论上,我可以在一个全新的机器上启动Docker容器(该机器仅包含Docker),并开始与Analog Discovery 2通信,无需任何麻烦。使用Analog Discovery 2,我可以编写测试来验证我的ADCs、DACs,或向我电路板上的不同芯片发送I2C/SPI命令(以及其他许多功能)。

通过持续集成实现扩展

现在,让我们讨论容器如何增强持续集成系统以提高效率和可扩展性。当我们开始将容器与持续集成(CI)系统结合使用时,真正的魔法就发生了。我们可能拥有数十台,甚至数百台物理测试机,或者能够访问成千上万台云机器用于我们的测试和构建服务器。为了实际扩展,如上所述,我们不能配置每一台随之上线的单独机器。在每次CI运行中提供一个容器,不仅为我们提供了一种系统化、可重复的构建和测试运行方式,而且还使我们免于每次启动机器时都必须重新配置机器(在云中,几乎每次CI运行时都会发生这种情况)。通过利用容器进行嵌入式构建和物理硬件测试,我们为自己和我们的公司提供了一定级别的扩展性,这是前几代人只能梦想到的。

结论

在本文中,我们强调了容器在嵌入式系统开发中的关键作用,特别是对于跨不同类型基础设施保持一致的构建和测试环境。它们与持续集成系统的整合不仅简化了开发过程,还提高了产品的可扩展性和可靠性。随着容器技术的进步,其采用对开发人员来说将变得越来越重要。通过访问一些示例仓库,深入研究并尝试不同的设置,网址为https://gitlab.com/docker-embedded

关于作者

关于作者

Ari 是一位在设计、制造、测试以及集成电气、机械和软件系统方面拥有丰富经验的工程师。他热衷于将设计、验证和测试工程师凝聚成一个高效团队,共同工作。

相关资源

相关的技术文档

返回主页
Thank you, you are now subscribed to updates.