车载软件架构 --- 什么是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)

持续部署是持续交付的进一步延伸,它自动将应用发布到生产环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都依赖精心设计的自动化测试。实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。

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 可自动执行以前将新代码从提交到生产所需的人工干预,因此可最大限度地减少停机时间,并加快代码的发布速度。而且,由于能够更快地将更新和更改集成到代码中,因此,可以更加频繁、高效地采纳用户的反馈意见,从而为用户带来积极的效果,客户的整体满意度也会有所提高。

搁笔分享完毕!

愿你我相信时间的力量

做一个长期主义者

03-19
### CI/CD 的概念与实现方法 #### CI/CD 的基本概念 CI/CD 是一种现代软件工程实践,代表 **持续集成 (Continuous Integration)** 和 **持续交付/部署 (Continuous Delivery/Deployment)**。它不仅是一个技术术语,更是一种流程和文化,旨在通过自动化手段加速软件开发周期并提高质量。 - 持续集成 (CI) 主要关注开发者频繁提交代码到共享仓库后的自动验证过程,确保每次变更不会破坏现有功能[^1]。 - 持续交付 (CD) 则进一步扩展了这一理念,强调将经过测试的代码随时准备好发布给最终用户[^2]。 - 如果包含持续部署,则意味着每一次成功的构建都会立即被部署至生产环境,无需额外的人工干预。 #### 实现 CI/CD 的核心原理 CI/CD 的本质在于建立一条高效的流水线来连接开发、测试和运维团队的工作流。这条流水线由多个阶段组成,每个阶段都依赖前一阶段的成功完成作为触发条件: 1. **版本控制**:所有源码存储在一个集中式的版本控制系统中(如 Git),以便多人协作开发的同时保持一致性[^3]。 2. **构建**:当有新的更改推送到仓库时,会启动一个构建服务器执行一系列预设的任务,比如编译程序文件或者打包应用程序[^4]。 3. **单元测试 & 集成测试**:在成功构建之后,系统会对新生成的应用包进行全面的功能性和性能上的检测,以发现潜在缺陷。 4. **静态分析 / 动态扫描**:除了传统的功能性测试外,还应对代码质量和安全性给予足够的重视,利用专门工具进行漏洞排查等操作。 5. **容器化处理**:为了保证不同环境中的一致性表现,可以采用 Docker 等技术创建标准化镜像封装应用及其运行所需的一切资源。 6. **部署准备**:最后一步通常是模拟真实场景下的试运行,在此期间可能会涉及蓝绿部署策略或是金丝雀发布的运用。 7. **实际投产**:一旦确认无误即可正式上线运营,并继续监控其后续运作状况反馈数据用于优化改进未来版本。 以下是基于 Jenkins 工具的一个简单 declarative pipeline 脚本实例展示如何定义上述提到的一些典型步骤: ```groovy pipeline { agent any stages { stage('拉取代码') { steps { git branch: 'main', url: 'https://github.com/example/repo.git' } } stage('构建项目') { steps { sh './mvnw clean package -DskipTests=true' } } stage('运行测试') { steps { sh './mvnw test' } } stage('部署应用') { when { expression { env.BRANCH_NAME ==~ /^(release|hotfix)/ } } steps { sshPublisher(publishers: [ sshPublisherDesc( configName: 'production-server', transfers: [sshTransfer(cleanRemote: false, sourceFiles: '**/*.jar')], usePromotionTimestamp: false, verbose: true ) ]) } } } } ``` 该脚本涵盖了从获取最新代码副本直到将其推送至远程主机的过程,其中还包括了一些条件判断逻辑用来区分特定分支的行为模式差异。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值