在不断发展的嵌入式系统世界中,迫切需要采用软件领域的最佳实践来确保及时、一致和高质量的发布。嵌入式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可以彻底改变嵌入式开发人员的产品开发方式。