我们说了GitLab CI/CD那么多的优点,那么它到底是由哪几部分组成的?有哪些基本概念?搭建它又需要哪些知识?

在本节中,我们先来整体介绍一下GitLab CI/CD的几个概念、它由哪几部分构成,以及各个组件是如何相互搭配工作的。

GitLab CI/CD由以下两部分构成。

(1)运行流水线的环境。它是由GitLab Runner提供的,这是一个由GitLab开发的开源软件包,要搭建GitLab CI/CD就必须安装它,因为它是流水线的运行环境。

(2)定义流水线内容的.gitlab-ci.yml文件。这是一个YAML文件,它以一种结构化的方式来声明一条流水线—— 官方提供了很多关键词来覆盖各种业务场景,使你在编写极少Shell脚本的情况下也能应对复杂的业务场景。

除此之外,在定义的流水线中,还需要掌握的概念有以下几个。

(1)流水线(pipeline)。在GitLab CI/CD中,流水线由.gitlab-ci.yml文件来定义。实际上,它是一系列的自动化作业。这些作业按照一定顺序运行,就形成了一条有序的流水线。触发流水线的时机可以是代码推送、创建tag、合并请求,以及定时触发等。通常,由创建tag触发的流水线叫作tag流水线,由合并请求触发的流水线叫作合并请求流水线。此外,还有定时触发的定时流水线、跨项目流水线以及父子流水线等

(2)阶段(stages)。阶段在流水线之下,主要用于给作业分组,并规定每个阶段的运行顺序。它可以将几个作业归纳到一个群组里,比如构建阶段群组、测试阶段群组和部署阶段群组。

(3)作业(job)。作业在阶段之下,是最基础的执行单元。它是最小化的自动运行任务,比如安装Node.js依赖包、运行测试用例。

在GitLab的UI中,流水线的详情如图1-1所示。

可以看到,流水线包含3个阶段,分别是Install、Build和Deploy。其中,Install阶段包含两个作业,即install_job和job_name。

至此,我们介绍了GitLab CI/CD的几个基本概念。理解这几个概念,有助于快速地构建基本的GitLab CI/CD知识体系。

如果你要使用GitLab CI/CD,只需要安装一个GitLab Runner,然后在项目根目录创建一个.gitlab-ci.yml文件。是不是很简单?你不需要使用复杂的插件来实现自己的需求,也不需要写太多的Shell脚本,只需一个可用的runner以及七八个关键词,就能将一个项目的流水线运行起来。

图1-1 流水线的详情

虽然GitLab CI/CD的概念很少,学习曲线也比较平缓,但是相关的中文学习资料和教程并不多,相关的视频教程也很少。有人觉得GitLab CI/CD难学,除了上述原因,大概还因为GitLab CI/CD有很多配置项、关键词和流水线变量需要理解。除了 GitLab Runner与.gitlab-ci.yml 这两大概念,还有很多其他概念和配置项。如GitLab Runner的安装方式就有不少于5种,且每种安装方式又有不同的配置项以及不同的特性。GitLab Runner安装好之后,并不能被GitLab直接调用,还需要开发者为项目或项目组注册一个可用的runner —— 它将负责执行流水线的内容,并与GitLab通信、上传执行结果与日志。注册runner时,开发者需要了解runner的执行器—— 不同的执行器有不同的特性,在执行流水线时可能会有些许差异。开发者除了需要掌握GitLab Runner多种多样的安装方式和执行器,还要掌握.gitlab-ci.yml文件中的很多内容。要编写.gitlab-ci.yml文件内容,开发者必须使用GitLab CI/CD官方网站给出的关键词。目前的版本(GitLab v14.1.0)共有5个全局关键词和 31 个作业关键词,想要全部记住它们并不是一件简单的事情。实际上,我们在使用时,并不需要了解所有关键词。之所以设计那么多关键词和配置项,是因为软件项目的业务场景是多种多样的,GitLab CI/CD必须要考虑到各种业务场景。在学习初期,开发者只需要了解七八个关键词,就足以应对日常的业务开发。我们会在后续章节中详细介绍GitLab CI/CD的这些关键词和配置项,还将展示如何快速搭建一个完整的GitLab CI/CD的环境以及如何进行一些高阶的流水线操作,以帮助你完成各种复杂的项目集成、解决项目部署难题。

为了帮助你快速、高效地学习GitLab CI/CD,我们设计了一条较为平缓且力求短期受益最大化的学习路线,如下所示:

熟悉GitLab CI/CD的基本概念 → 搭建并配置基础的GitLab CI/CD环境 → 熟悉流水线常用的关键词 → 编写简单的流水线 → 熟悉GitLab Runner高级配置 → 熟悉高阶关键词 → 实践更为复杂的CI/CD场景。