我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:
屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。
无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。
时间不知不觉中,快要来到深秋。马上到了国庆的假期,成年人的我也不知道去哪里渡自己的灵魂,独自敲击一些文字算是对这段时间做一个记录。
本文主要分享电车载软件架构 — 什么是CI/CD?
一、背景信息
随着软件将车辆的安全性、舒适性和便利性提升到新的水平,开发人员现在需要比传统系统更现代、更强大的软件开发环境。这样的环境需要能够经常更新软件并在车辆上市后将这些更新部署到车辆上。这种方法叫做持续集成(CI)和持续部署(CD),简称CI/CD。
过去,软件开发遵循僵化、迟钝的瀑布法,并使用高度离散的工具链。开发过程被分割为不同的阶段,只有前一个阶段结束,后一个阶段才会开始。许多开发过程都需要手动完成。从工具链的一个部分切换到下一个部分也是如此。采用这种方法,推出新的软件版本需要耗时六到八个月。
如今汽车行业力推的软硬分离架构为开发人员带来新的机会。他们可以使用现代化的敏捷方法及DevOps方法按照自己的时间计划来更新软件,速度更快且不受硬件更迭或其它物理更新的影响。这种方法可实现前所未有的在速度、可扩展性、质量和安全性方面水平的提升。
二、什么是CI/CD?
CI/CD是持续集成(Continuous Integration, CI)、持续交付(Continuous Delivery, CD)与持续部署(Continuous Deployment, CD,注意这里的CD对应了两个不同的概念)的简称。它是实现敏捷开发和DevOps理念的一种方法,通过持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试,到交付和部署)。
1. 持续集成(Continuous Integration, CI)
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。持续集成的主要流程包括:
-> 代码编译:将源代码编译成可执行文件或库。
->代码打包:将编译后的文件打包成可部署的单元。
->单元测试:对代码中的各个单元进行测试,确保每个单元按预期工作。
->代码静态扫描分析:对代码进行静态分析,检查潜在的错误、漏洞或不良编程实践。
->UI、接口自动化测试:对应用的用户界面和接口进行自动化测试,确保它们按预期工作。
持续集成的好处包括快速发现错误、防止分支大幅偏离主干、降低总体构建成本,并在开发周期的早期发现缺陷。
2. 持续交付(Continuous Delivery, CD)
持续交付是持续集成流程的扩展,它强调软件在持续集成的基础上,始终处于可部署的状态。持续交付的目标是拥有一个可随时部署到生产环境的代码库。在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。但需要注意的是,持续交付在自动化测试和集成结束后,具备部署的能力,但不会自动部署,而是手动部署。
3. 持续部署(Continuous Deployment, CD)
持续部署是持续交付的进一步延伸,它自动将应用发布到生产环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都依赖精心设计的自动化测试。实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。
CI/CD集成于CI/CD工具及代码托管服务中,它让持续自动化和持续监控贯穿于应用的整个生命周期。这些关联的事务通常被统称为CI/CD管道(Pipeline),由开发、测试、运维团队以敏捷方式协同支持。CI/CD有助于降低应用的部署风险,提高开发效率,并加速软件交付周期。在现代软件开发中,CI/CD已成为不可或缺的一部分。
在持续集成(CI)方法中,软件将实现自动化编译,软件开发的各个步骤都将包含在 “CI链” 中,因为一个环节的输出将成为下一个环节的输入。持续部署(CD)指在车辆上市后自动部署新的软件版本。CI/CD以及持续测试(CT),现在都可以在汽车上实现,但在汽车行业,测试新的高级应用程序会造成独特的难题,原因是测试需要在实体车辆上或者在测试台上的复杂模拟环境中进行。例如,想象一下对特定软件进行测试有多复杂,该软件需要分析来自多个雷达和摄像头的输入信息,以便自主执行操控,如超过公路上慢速行驶的汽车,或者在车辆、行人及其它障碍物遍布的复杂城市环境中进行导航。
理想的方法是通过基于云的集中化平台,使开发人员能够在位于世界任何测试中心的相关测试台上执行任何测试,从而消除开发和测试过程中的瓶颈。这些测试可以安排软件在环(SIL)、硬件在环(HIL)甚至车辆在环(VIL),以便进行更真实的测试。此方法可以利用全球资源,达到处理当今艰巨挑战所需的规模。
使用基于云的CI意味着,开发团队创建的新代码自动集成到更大的代码库中,基于云的CD使用无线(OTA)更新确保成功构建的代码自动部署到所在的测试或生产环境中。应用得当的话,基于云的方法还可以在整个过程中进行安全性编译,包括灾难恢复。托管在云中的集中式基础架构允许通过单一管理视图查看所有这些高度安全且有弹性的CI链。
CI/CD 可自动执行以前将新代码从提交到生产所需的人工干预,因此可最大限度地减少停机时间,并加快代码的发布速度。而且,由于能够更快地将更新和更改集成到代码中,因此,可以更加频繁、高效地采纳用户的反馈意见,从而为用户带来积极的效果,客户的整体满意度也会有所提高。
搁笔分享完毕!
愿你我相信时间的力量
做一个长期主义者