嵌入式系统开发中的DevOps自动化: 工具、益处和挑战
本文旨在对嵌入式软件开发中DevOps工具链的现状进行系统性回顾,并说明其中的益处和挑战。
01
DevOps的介绍
DevOps是一个复合术语,可扩展为Development(开发)和Operations(运维)。DevOps是自动化编程领域与虚拟化领域的奇迹,具有持续改进和持续发展的能力,强调协同工作和使用新工具,注重改善团队之间的沟通、协作,通过定期自动化发布软件提高软件系统质量与客户满意度。根据CA Technologies最新全球调查结果,实施DevOps的企业在客户满意度方面实现了高达52%的显著增长,在员工生产力方面则实现了高达50%的明显提高。
02
DevOps工具链
DevOps的工具链包含了持续开发、持续测试、持续集成、持续交付和持续部署,如下图所示:
▲图:DevOps工具链
*TFS:Team Foundation Server,Microsoft提供的管理和开发软件项目的整个生命周期的平台工具,可在设计阶段维护项目文档和待办事件;
*Git:一个开源的分布式版本控制系统,可用于进行代码的开发和审查;
*Jenkins:一个开源的持续集成工具,主要用于持续集成和持续部署;
*Klockwork:一个代码缺陷和安全漏洞静态代码分析工具;
*TICS:德州仪器的一款合成器软件,可用于分析静态代码;
*Docker:一个开源的应用容器引擎,可用于构建与容器化;
*Ansible:一个自动化运维工具,可用于配置管理;
*Nagios:一个开源的免费网络监视工具。
1.Git版本控制
Git是一个分布式版本控制系统。开发人员可以使用功能齐全的本地存储库轻松开展脱机或远程工作:在本地提交工作,并将存储库的副本与服务器上的副本进行同步。Git克服了集中式版本控制系统必须先与服务器同步代码的缺点,且具备良好的故障转移和备份机制:当服务器发生故障时,使用者可以将数据从任何客户端的存储库复制回服务器来进行恢复。
Git的优点有:
免费且开源;
适合分布式开发;
公共服务器压力和数据量较小;
按元数据方式存储隐式备份,具备完整克隆版存储库;
可防止数据被篡改,具备安全性;
分支简单,支持快速切换分支,方便合并。
2.Jenkins
Jenkins是一个用于持续集成的、独立的、开源的自动化服务器,可用于执行自动化构建、测试和交付等各种任务,也可与其他测试和部署技术集成。下图展示了Jenkins的简单工作流程:
▲图:Jenkins工作流程
3.静态代码分析
随着嵌入式系统功能的不断增加,软件的可靠性变得至关重要,一个微小变化就可能对系统整体可靠性带来风险,甚至对生命财产安全造成巨大威胁。静态代码分析指在不实际执行程序的情况下对代码语义和行为进行分析,由此找出程序中由于错误的编码导致异常的程序语义或未定义的行为,是嵌入式软件开发中的关键步骤。
无需等待所有代码编写完毕,也无需构建运行环境、编写测试用例,静态分析可以通过分析保留部分标准所得的源代码,在软件开发流程的早期阶段发现代码中的各种问题,大大减少开发和测试平台存在故障的可能性,有助于实现测试自动化并提高嵌入式系统软件的开发效率、质量和可靠性。
目前主流的静态代码分析工具有:Klockwork、Cppcheck、CppDepend、Parasoft C/C++test、PVS Studio、Coverity、Polyspace、Flawfinder、Helix QAX等。
4.Docker
Docker是一个用Go语言实现的开源项目(应用容器引擎),可供开发人员使用统一的方式打包其应用和依赖项到可移植的容器中,通过虚拟化的形式发布至任何安装了Docker引擎的服务器中(如Linux、Windows)。Docker使用沙箱机制(一个限制应用程序对系统资源进行访问的运行环境),相互之间不存在任何接口,从而实现环境差异的屏蔽:只要程序被打包至Docker中,无论运行于何种环境下,程序行为都是一致的。
Docker的优点有:
高效利用系统资源;
启动时间更短;
运行环境一致;
有利于持续支付和持续部署;
维护、拓展和迁移较为轻松。
03
嵌入式软件开发采用DevOps的益处
嵌入式系统由嵌入式软硬件组成。嵌入式软件指在嵌入式硬件上运行并为嵌入式系统服务的操作系统和应用程序,与外部硬件和设备联系紧密,每种嵌入式软件都有自己独特的应用环境和实用价值。由于嵌入式系统通常存在小体积、小存储空间、低成本、低功耗等要求,嵌入式软件的代码往往要比大型机的代码更为精简;在安全关键领域,嵌入式软件需要运行可靠、稳定,具备错误处理及故障恢复等功能。
嵌入式软件开发采用DevOps的益处有:
更快的发布和部署周期;
提高开发团队与运维团队之间的沟通效率;
最大程度缩短新功能或服务的部署时间;
提高运营团队的生产力;
制定易于复制的标准化过程,提高交付速度;
提升所有系统组件的质量、可靠性和可重复使用性;
最大限度减小停机部署的概率;
提升企业数字化战略转型的成功率。
04
采用DevOps时面临的挑战
当DevOps被应用至嵌入式领域时,可能会面临以下挑战:
部分硬件和接口之间可能存在依赖性,不遵循模块化方法;
软件环境需要与当前硬件版本兼容;
需要将新工具与现有工具进行集成;
当前嵌入式领域缺乏适当的自动化工具;
软件需要进行交叉编译才能应用于嵌入式平台;
嵌入式系统领域的生产环境可见性有限;
缺少合适的资源来配置环境;
硬件资源有限且可拓展性差;
组织中固有的思维方式和文化不易被打破;
相关法律法规尚不完善。
05
解决方案
DevOps在实践中存在瓶颈的根本原因是:运维团队与开发团队实践流程无法同步。DevOps作为一种文化与概念,旨在改善开发团队和运维团队之间的沟通和协作,提供以下解决方案:
找出系统中所有的硬件和软件的依赖关系,并对其进行优先级排序;
全面了解硬件和软件架构后再进行设计,确保架构遵循模块化方法;
减少开发团队、测试团队和运维团队之间的沟通障碍;
预先评估使用DevOps的成本和可能带来的风险;
维持良好的组织管理结构;
为团队提供相关DevOps培训;
聘用DevOps专家进行辅助指引。
SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,内置了自动化测试功能,在自动化测试完成后还可生成测试报告。嵌入式代码无需烧写到设备中即可通过SkyEye在PC机上运行。同时,SkyEye还提供了命令行工具进行仿真控制,可以集成到持续集成工作流中,助力DevOps实践。
参考文献
1. https://www.researchgate.net/publication/349623190_AUTOMATION_OF_DEVOPS_IN_EMBEDDED_SYSTEM_DEVELOPMENT_TOOLS_CHALLENGES_AND_SOLUTION
2. https://baijiahao.baidu.com/s?id=1675253978950340809&wfr=spider&for=pc
3. https://m.php.cn/docker/486869.html