社论
机器人的持续集成和持续交付(CI/CD)
发布02/01/2021
作者:Gerry Ens, Go West Robotics首席技术官
如果说有一件事是所有人都同意的,那就是没有人能就“CI/CD”的单一正式定义达成一致。虽然定义可能不同,但几乎每个人都依赖一个类似的图,基于一个无限循环,来表示实践的“连续”本质,这些实践对于持续集成和交付是通用的:
- 开发实践是敏捷的,并且不断地更新代码库。根据执行代码的行业和平台,生产系统的更新每天可能会发生多次(终端用户甚至不知道)。
- 代码释放和部署过程是最大的,可以最大程度地使开发人员更容易发货稳定,安全软件并迅速响应客户需求。您的过程应允许开发人员尽可能少的努力运送高质量代码。
- 高效的实践将平衡开发人员自治需求免受质量要求的需求,最佳流程使用软件图书馆和对等审查进行持续测试,以确定在影响系统性能或客户满意之前识别回归或防止新错误
- 能够洞察系统性能和故障的智能报告系统对于管理人员支持CI/CD实践至关重要。
- 良好的architected CI / CD系统在云中执行以控制执行成本,减少编译和测试系统运行时,并为远程开发团队和管理者提供可访问性。
简单地说,CI/CD可以帮助开发人员更快地编写更好的代码,同时更快、更容易地将代码送到客户手中。
考虑到我们对测试的重视,我们的团队倾向于超越仅仅CI/CD的一步,并使用术语“CI/CT/CD”来表示持续集成、持续测试和持续交付。
背景CI / CT / CD
在物联网(IoT)和云处理出现之前,硬件产品(包括机器人)无法动态更新其软件,这就要求用户或集成商执行手动固件更新程序,通常包括对布线和计算机的内部更新。这个过程允许软件进度跟踪硬件开发进度,并允许更多的时间进行测试。这些产品不可能一直提供软件更新。在今天的环境中,这种期望已经改变了。客户希望不断提供新功能,他们希望快速修复bug,无需用户交互或昂贵的停机时间。
起源的CI / CT / CD
在纯软件项目(如移动应用程序、Web或SaaS开发)中,CI/CT/CD已经成为软件开发生命周期(SDLC)的一部分有一段时间了。不同的敏捷项目管理策略(Scrum,测试驱动开发,极限编程等)都将这些作为他们的DevOps方法的一部分。自动化测试开发对加速软件的特性交付和周转时间做出了很大的贡献。通过自动化测试,测试进度已与人工进度的限制断开。并行运行多个测试允许测试执行的指数加速,在每次构建时都连续运行测试。虽然测试执行变得更快了,但测试的开发仍然需要时间。由于纯软件产品的编码特性和测试之间的相对相似性,再加上软件测试框架和平台的出现,自动软件测试已经成为软件开发人员工作中不可或缺的一部分。
适用于五金产品
在手机操作系统更新、路由器固件更新和其他连接设备的例子之后,对频繁的软件更新的期望已经成为大多数硬件的标准,包括机器人。上面的开发实践已经被映射到机器人开发中,取得了不同程度的成功,在开发的自动化测试方面通常会出现问题。
独立地测试机器人软件的各个组件的单元测试通常是由开发人员作为其标准流程的一部分生成的,以确保特定代码块现在和将来按照预期的方式运行。但是,对于集成或系统级测试来说,测试变得更加困难,因为软件必须与真实的硬件进行通信。特别是机器人,机器人所采取的动作(即运动)需要高保真的传感器数据,这进一步使测试需要复杂化。模拟有助于克服这一障碍。
模拟
大多数,如果不是所有机器人公司在其开发过程中的某个点使用模拟器。一些构建自己的和一些使用架子产品,这两者都往往需要大量的机器人的开发时间来开发和配置。虽然模拟通过快速试验和错误提供了一种无价的审查代码变化和新的开发的手段,但仿真只是真正能够告诉开发商不起作用的开发人员。模拟成功绝不是真实硬件成功的保证,因为模拟只与模拟环境一样好。正如俗话所说,“模拟注定要成功,但他们是为机器人开发人员,工程师及其管理者提供快速反馈的重要第一步。
CI工具集成
开发或选择集成平台时最重要的决定是直观的用户界面。这允许用户在结果上清除反馈,并确保他们可以找到所需决策所需的数据。除了一个用户友好的仪表板外,最好的连续集成系统还易于使用允许触发测试的API,并通过标准集成套件,如Jenkins,Travis,Codepipine,GOCD等标准集成套件收集的结果。
不幸的是,许多持续集成套件的二进制特性(即,测试只“通过”或“失败”)及其有限的测试结果数据,导致了昂贵的定制。当管理者试图为团队引进新成员时,这也会导致陡峭的学习曲线。相比之下,一个干净直观的界面可以在很短的时间内由行业标准的web组件创建,并且可以为开发人员提供测试失败的有用细节,而不仅仅是简单的“失败”状态。例如,我们经常将测试指示板配置为包含测试执行程序的每个测试完成的完整系统日志转储。
更短的测试时间和更好的结果
当机器人代码已被优化以减少状态依赖项时,更长的模拟任务可以分解为许多较小的任务。例如,长期以来可能有一个机器人离开它的充电站,转到仓库,从指定的垃圾箱中挑选一个项目,将物品交给一个新的位置,并最终返回其“家”。对于理想的测试用例执行,这些中介步骤中的每一个可能成为自己的任务。
一旦任务被解释为基本情况,就有几种优势可用。首先,测试用例将在失败时提供更多有针对性的反馈 - 失败可以孤立到短期使命中包含的较小的代码子集。其次,可以并行执行测试,以显着降低整体测试执行时间,从而快速向开发人员提供反馈。此外,组件任务可以由其他开发人员合并,并在构建自己的模拟任务时使用。
云中的执行
为了真正节省开发人员时间并降低处理成本,最好的CI / CT / CD管道利用云计算来优化测试执行。虽然许多开发人员可能具有昂贵且有能力的计算机,但无具有本地系统,可以与高端云计算机的计算能力竞争。重要的是,如果云执行脚本是适当的实现,公司只需支付测试执行所需的相对较短的持续时间的云资源。