GitLab持续集成

updated: 2021-06-24

GitLab-CI 是一套配合 GitLab 使用的持续集成系统。从V8开始,完全集成到 gitlab 本身,默认在所有项目上启用。

想要启用 GitLab CI,需要具备两样东西:

  1. 工程根目录下的 .gitlab-ci.yml 文件
  2. 一个 gitlab-runner

.gitlab-ci.yml 文件中定义了要做哪些工作,gitlab-runner 则是这些工作的执行者。

Runner 的安装与配置

在 GitLab 中,runner 执行你在 .gitlab-ci.yml 定义的 job. Runner 可以是一个虚拟机、一个 VPS、一个裸机或是一个 docker 容器。GitLab 与 Runner 通过 api 交流,所以唯一必备的条件是承载 Runner 的机器具有网络连接。

一个 runner 可以被指定到一个特定的 project或多个 project 服务。如果 一个 runner 为多个 project 服务,则这个 runner 被称为 Shared Runner

关于 Runner 的更多信息可参考 Runner README

Mac OS 为例:

下载二进制

1
sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"

修改权限

1
sudo chmod +x /usr/local/bin/gitlab-runner

获取 Token

token

注册 runner

1
sudo gitlab-runner register

输入 gitlab 服务器地址

1
2
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://172.16.1.228/

输入刚才获取的 token

1
2
Enter the registration token:
a6PTSWmNKSB8FHpsSzww

输入 runner 的 description

1
2
Enter a description for the runner:
[liubodeMacBook-Pro.local]:

输入 runner 的 tag

1
2
Enter tags for the runner (comma-separated):
struggle,experiment

选择执行环境

1
2
Enter an executor: docker+machine, kubernetes, custom, docker, docker-ssh, ssh, virtualbox, parallels, shell, docker-ssh+machine:
shell

安装并启动服务

1
2
3
cd ~
sudo gitlab-runner install --user=<user>
sudo gitlab-runner start

查看服务运行状态

1
sudo gitlab-runner status

核验 runner

1
sudo gitlab-runner verify

available-runners

编辑 runner

点击上图红框内的编辑按钮,勾选 Run untagged jobs 并保存。

run-untagged-jobs

创建 .gitlab-ci.yml 文件

在你的工程根目录下创建一个命名为 .gitlab-ci.yml 的文件。在定义 CI 需要做的工作之前,先了解一下 .gitlab-ci.yml 的内容可以有哪些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
variables:
projectName: "projectName"

before_script:
- export LANG=en_US.UTF-8
- echo $projectName

after_script:
- export LANG=en_US.UTF-8
- echo "complete"

stages:
- clean
- test
- archive

clean:
stage: clean
script:
echo "clean"

test:
stage: test
script:
echo "test"

archive:
stage: archive
script:
echo "archive"
  1. variables 中定义了一些全局变量
  2. job 中具体定义了要做什么工作(clean、test、archive 都是 job 的名称,可以与 stages 里的不一致,但里面的 stage 的值 需要与 stages 中的相同)
  3. stages 中定义了 job 的执行顺序
  4. before_script 在每个 job 中的 script 执行前都会执行的 script
  5. after_script 在每个 job 中的 script 执行后都会执行的 script

查看 CI 工作状态

commit、push 代码后,CI 就会开始运行。可以在工程的 Builds 中查看 build 状态。
inprogress
pipelines

References