首页/文章/ 详情

关于自动驾驶开发和CI/CD流程

1年前浏览3491

大家好,我是李慢慢。

后面准备写一系列关于CI/CD的学习笔记。

如下是第一篇。

自动驾驶工程师开发的代码,从开始开发到真正部署到域控中,需要经过一系列的开发-集成-测试-部署等过程。

这个过程如果是手动部署的话,会发生什么呢?

1、交付缓慢
手动任务对于完成任务的人来说是乏味且令人沮丧的。这些任务减慢了交付过程,并最终阻碍了创新。如果竞争对手使用自动化而你没有使用自动化,那么竞争对手就赢了。等待部署的代码是不赚钱的。
2、缺乏可见性
“错误发生在哪里?是什么原因造成的?每个环境中部署了什么?我们可以把程序回退吗?”。过程缺乏监控,程序错误调试困难重重。
3、错误和用户不满
没有自动化就意味着用户会出错。每个手动任务都为错误打开了大门。这些错误经常发生并且难以解决。另外,由于不经常合并大量代码,因此在漫长的开发周期结束时会发现错误,修复这些错误可能更具挑战性,或者对难于排除故障的代码库中的其他部分产生影响。错误会导致软件交付过程中涉及的个人和部门之间关系紧张。运维部门将糟糕的代码归咎于开发人员。开发人员对所有手动任务感到沮丧,并指责QA没能捕获错误。当客服人员必须解决最终用户的不满时,他们会责怪参与过程的每个人。最终,这个组织会缺乏协作和工作友谊。

所以。

为了帮助项目能够更快的进行版本迭代,现如今持续集成(CI)和持续交付/部署(CD)已经广泛试用。在这篇文章中,我将介绍如何使用使用 GitLab CI/CD 工具进行项目的自动化打包和部署。

在软件工程中,CI/CD 或 CICD 通常指的是持续集成(Continuous Integration)和持续交付(Continuous Delivery)或持续部署(Continuous Deploy)的组合实践。CI/CD 通过在应用程序的构建、测试和部署中实施自动化,在开发和运营团队之间架起了桥梁。


持续集成

Continuous Integration,在日常的应用开发中,我们经常会让多位开发人员同时开发不同的功能模块,但是这样会使分支源代码的合并工作很繁琐耗时。这是因为不同开发人员的提交可能会存在冲突。持续集成的目的就是帮助开发人员更加频繁的将代码更改合并到主干分支上。而一旦开发人员的分支代码被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(单元测试和集成测试)来验证这些更改,以确保这些变更并没有引入新的问题到应用中。


持续交付

Continuous Delivery,完成持续集成中构建以及单元测试和集成测试的自动化流程后,持续交付可以自动将已验证的代码发布到存储库(如GitLab)中。此时,运维团队可以轻松快速的将应用部署到线上环境。

持续部署

Continuous Deploy,持续部署是最后的阶段,它可以自动将应用发布到线上环境了,并且记录上线记录,方便进行版本回溯。


CI/CD 能够自动完成构建,测试和部署的管道线。它有如下的优势:

1、较小代码的合并,快速的功能迭代

2、每次的构建,测试,部署都是有记录的,能够缩短解决问题的时间

3、每次代码变更都需要进行单元测试和集成测试,降低应用出现问题

4、通过和 GitHub 或 GitLab 这样的源码管理平台配合,使得应用易于维护和更新。


CI/CD 工具介绍

年来随着 DevOps 的兴起,导致了对 CI/CD 工具的强烈需求。目前行业内比较主要流行的 CI/CD 工具是 Jenkins 和 GitLab CI/CD。此外 GitHub 也在 2018年10月推出了 GitHub Actions 来支持 CI/CD。这三者都能实现应用从源码到上线的自动化,但还是各有侧重。

工具源码管理私有化适用群体
Jenkins不支持支持运维人员
GitLab CI/CD支持支持企业,开发运维人员
GitHub Actions支持不支持个人开发者


GitLab 是由 GitLab Inc 开发,一款基于 Git 的完全集成的软件开发平台。它的社区版是免费的,提供了 Git 仓库管理,issue 跟踪,代码评审和 CI/CD 等功能。这些功能基本将一个应用的开发周期涉及的操作一网打尽。其实 GitHub 也有这些功能,唯一的缺点可能就是不支持私有化部署。毕竟企业里的项目源码是最重要的财富,放在公网上还是比较忌讳的。所以本文主要围绕 GitLab CI/CD 来介绍它的原理以及实际应用。


原理

谈及 GitLab CI/CD,就不可避开谈及 GitLab Runner 项目,它是一个开源项目,用于执行任务,并将执行结果传输回 GitLab。Runner 可以安装在物理机上,也可以安装在虚拟机中,也可以通过 Docker(推荐)的方式安装。它是以守护进程/服务运行着。
那 Runner 如何和 GitLab 交互呢,需要我们注册和初始化 Runner,所需要的信息是下图中的链接(标记3)和 token(标记4),并选择一个执行器来执行 .gitlab-ci.yml 文件中的命令(推荐 docker,确保干净,轻量级的系统环境)。

GitLab CI/CD 的原理就是 GitLab Runner 服务来启动一个执行器来运行 .gitlab-ci.yml 中各个阶段的脚本命令,并将运行的结果返回给 GitLab。


配置

要使用 GitLab CI/CD 的功能,除了要设置运行环境 GitLab Runner 之外,还需要告诉执行器如何执行。这里就涉及到 .gitlab-ci.yml 的配置。将该文件置于仓库的根目录即可,GitLab CI/CD 会自动去解析此文件。.gitlab-ci.yml 文件的配置详细可以参考官方文档。


效果展示

置完 .gitlab-ci.yml 后,提交到 GitLab 的仓库中,每当代码更新时,在 CI/CD -> Pipelines 中就会生成一条新版本的流水线任务,在 Stages 列中会依次触发每个流程要走的脚本。

样例如下图所示:

本文完。

下一篇,将尝试手动实操,敬请持续关注。


来源:车路慢慢
自动驾驶
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-22
最近编辑:1年前
李慢慢
硕士 自动驾驶仿真工程师一枚
获赞 11粉丝 71文章 122课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈