车载软件架构 --- 什么是CI/CD?(科普篇)
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:
屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。
无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。
时间不知不觉中,快要来到深秋。马上到了中秋和国庆的假期,成年人的我也不知道去哪里渡自己的灵魂,独自敲击一些文字算是对这段时间做一个记录。
本文主要分享电车载软件架构 — 什么是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)