Skip to content

用 GitLab CI 进行持续集成

Published: at 22:00编辑

简介

自 GitLab 8.0 版本起,GitLab CI 已经无缝集成至 GitLab 平台之中。这意味着,只需在项目中创建一个 .gitlab-ci.yml 文件,并配置一个 Runner,就可以轻松实现持续集成。随着 GitLab 的不断迭代更新,GitLab CI 的功能也日益增强。本文旨在介绍如何利用 GitLab CI 实现项目的持续集成。

相关概念

在深入探讨 GitLab CI 的应用之前,让我们先了解几个与持续集成密切相关的基本概念。

Pipeline

Pipeline 可以理解为一次完整的构建过程,它可以包括多个步骤,比如安装依赖、执行测试、编译代码、部署到测试或生产环境等。无论是代码提交还是合并请求(Merge Request),都有可能触发 Pipeline 的执行,如下图所示:

+------------------+           +----------------+
|                  |  trigger  |                |
|   Commit / MR    +---------->+    Pipeline    |
|                  |           |                |
+------------------+           +----------------+

Stages

Stages 指的是构建过程中的不同阶段。在一次 Pipeline 中,我们可以定义多个 Stages,它们具有以下特征:

因此,Stages 与 Pipeline 的关系可概括为:

+--------------------------------------------------------+
|                                                        |
|  Pipeline                                              |
|                                                        |
|  +-----------+     +------------+      +------------+  |
|  |  Stage 1  |---->|   Stage 2  |----->|   Stage 3  |  |
|  +-----------+     +------------+      +------------+  |
|                                                        |
+--------------------------------------------------------+

Jobs

Jobs 则是指在特定 Stage 内执行的具体任务。在同一个 Stage 中,可以定义多个 Jobs,它们的特点是:

因此,Jobs 与 Stage 之间的关系可以表示为:

+------------------------------------------+
|                                          |
|  Stage 1                                 |
|                                          |
|  +---------+  +---------+  +---------+   |
|  |  Job 1  |  |  Job 2  |  |  Job 3  |   |
|  +---------+  +---------+  +---------+   |
|                                          |
+------------------------------------------+

配置流程

一旦 Runner 设置完毕,下一步就是在项目根目录下添加 .gitlab-ci.yml 文件。通过此文件,每当有代码提交或合并请求发生时,相应的构建任务将自动启动。

您是否记得 Pipeline 是如何被触发的?实际上,正是通过代码提交或合并请求来启动 Pipeline 的。那么,.gitlab-ci.yml 文件与 Pipeline 之间存在怎样的联系呢?简而言之,.gitlab-ci.yml 文件的作用就是定义 Pipeline 的结构和行为。

基础语法

现在,让我们看一下 .gitlab-ci.yml 文件的基本编写方式:

# 定义构建阶段
stages:
  - build
  - test

# 定义任务
job1:
  stage: test
  script:
    - echo "我是 job1"
    - echo "我在 test 阶段"

# 定义任务
job2:
  stage: build
  script:
    - echo "我是 job2"
    - echo "我在 build 阶段"

如上所示,使用 stages 关键词定义构建阶段,而通过非关键词定义具体的任务(Jobs)。每个任务可以通过 stage 关键词指定其所属阶段。script 关键词则是每个任务的核心部分,用于指定任务执行的具体命令。

基于前面讨论的 Stages 和 Jobs 的关系,您能猜测上述示例的执行顺序吗?

我是 job2
我在 build 阶段
我是 job1
我在 test 阶段

没错,根据 stages 中的定义,build 阶段会先于 test 阶段执行,因此 stage:build 的任务将优先运行,随后才是 stage:test 的任务。

常见关键词

这里列出了一些常用的关键词,若您希望获取更详细的信息,请参考 [官方文档]。


上一篇
一些关于 Markdown 的奇技淫巧
下一篇
如何获取IE?