大家好,我是李慢慢。
后面准备写一系列关于CI/CD的学习笔记。
如下是第一篇。
自动驾驶工程师开发的代码,从开始开发到真正部署到域控中,需要经过一系列的开发-集成-测试-部署等过程。
这个过程如果是手动部署的话,会发生什么呢?
所以。
为了帮助项目能够更快的进行版本迭代,现如今持续集成(CI)和持续交付/部署(CD)已经广泛试用。在这篇文章中,我将介绍如何使用使用 GitLab CI/CD 工具进行项目的自动化打包和部署。
在软件工程中,CI/CD 或 CICD 通常指的是持续集成(Continuous Integration)和持续交付(Continuous Delivery)或持续部署(Continuous Deploy)的组合实践。CI/CD 通过在应用程序的构建、测试和部署中实施自动化,在开发和运营团队之间架起了桥梁。
持续集成
Continuous Integration,在日常的应用开发中,我们经常会让多位开发人员同时开发不同的功能模块,但是这样会使分支源代码的合并工作很繁琐耗时。这是因为不同开发人员的提交可能会存在冲突。持续集成的目的就是帮助开发人员更加频繁的将代码更改合并到主干分支上。而一旦开发人员的分支代码被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(单元测试和集成测试)来验证这些更改,以确保这些变更并没有引入新的问题到应用中。
持续交付
Continuous Delivery,完成持续集成中构建以及单元测试和集成测试的自动化流程后,持续交付可以自动将已验证的代码发布到存储库(如GitLab)中。此时,运维团队可以轻松快速的将应用部署到线上环境。
持续部署
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-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 列中会依次触发每个流程要走的脚本。
样例如下图所示:
本文完。
下一篇,将尝试手动实操,敬请持续关注。