DevOps作为软件工程领域新的方法论,是一种重视软件开发团队(Dev)和运维团队(Ops)之间沟通合作的文化,能够帮助开发者更快速、更可靠地构建、测试和发布软件。DevOps包括敏捷开发(Agile Development)、持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)和对应用程序的监控(或持续部署,Continuous Deployment,CD)。
本文旨在对嵌入式软件开发中DevOps工具链的现状进行系统性回顾,并说明其中的益处和挑战。
DevOps是一个复合术语,可扩展为Development(开发)和Operations(运维)。DevOps是自动化编程领域与虚拟化领域的奇迹,具有持续改进和持续发展的能力,强调协同工作和使用新工具,注重改善团队之间的沟通、协作,通过定期自动化发布软件提高软件系统质量与客户满意度。根据CA Technologies最新全球调查结果,实施DevOps的企业在客户满意度方面实现了高达52%的显著增长,在员工生产力方面则实现了高达50%的明显提高。
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的优点有:
嵌入式系统由嵌入式软硬件组成。嵌入式软件指在嵌入式硬件上运行并为嵌入式系统服务的操作系统和应用程序,与外部硬件和设备联系紧密,每种嵌入式软件都有自己独特的应用环境和实用价值。由于嵌入式系统通常存在小体积、小存储空间、低成本、低功耗等要求,嵌入式软件的代码往往要比大型机的代码更为精简;在安全关键领域,嵌入式软件需要运行可靠、稳定,具备错误处理及故障恢复等功能。
嵌入式软件开发采用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