Gitlab-CI 使用初探

Posted by Nicodechal on 2018-11-03

Gitlab-CI 介绍

Gitlab-CI 是 Gitlab 提供的一个服务,该服务为项目开发提供了自动化构建、测试和部署的能力。Gitlab-CI 可以在项目每次提交后触发配置好的自动化工作流程,例如在每次提交代码后对代码进行测试同时打包代码发布(持续集成)。Gitlan-CI 方便了提交代码后的代码测试、构建和部署,提高了代码交付的效率。

Gitlab-CI 的使用

从 Gitlab 8.0 版本开始 Gitlab-CI 已经被集成在 Gitlab 中,所以可以直接使用。在 Gitlab 上的项目使用 Gitlab-CI,只需要做两件事:

  1. 在项目的根目录下添加 .gitlab-ci.yml 文件
  2. 配置 gitlab-runner

之后只要推送代码,就可以在 Gitlab 的 CI/CD 菜单中看到 Gitlab-CI 的运行情况。

创建 .gitlab-ci.yml 文件

.gitlab-ci.yml 文件描述了需要 gitlab-ci 执行的自动化操作,每当提交代码之后,gitlab-ci 就会检查该文件然后根据该文件内容在 Runners 中执行相关操作。该文件是一个 YAML 文件。下面是一个 .gitlab-ci.yml 文件的实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
before_script: # 每个脚本执行前都要执行
- apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs #一些需要自动执行的命令
- ruby -v
- which ruby
- gem install bundler --no-ri --no-rdoc
- bundle install --jobs $(nproc) "${FLAGS[@]}"

rspec: # 一个job 名为 rspec
script:
- bundle exec rspec # 该 job 需要执行的脚本

rubocop:
script:
- bundle exec rubocop

创建完成后,将该文件添加到项目的根目录并上传到 gitlab 上:

1
2
3
git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml"
git push origin master

此时可以在 gitlab 的 WEB 页面看到刚才提交触发的构建,但是目前还没有配置 Runner 所以该构建处于 pending 状态(在 WEB 界面会看到一个暂停的小标记),接下来需要配置Runner。

配置 gitlab-runner

Gitlab-CI 使用 gitlab-runner 执行 .gitlab-ci.yml 配置的脚本,是脚本的执行器。使用时首先需要安装 gitlab-runner ,然后在 Gitlab 的 WEB 界面对 Runner 进行配置和分配。

本文使用 Docker 安装 gitlab-Runner,首先使用下面命令拉取 gitlab-runner 的镜像:

1
sudo docker pull gitlab/gitlab-runner

然后添加 gitlab-runner 的容器:

1
2
3
4
sudo docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

注册 Runner

1
sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register

注册过程参考 gitlab-runner 注册

最后运行下面命令启动

1
2
sudo docker exec -it gitlab-runner gitlab-ci-multi-runner install
sudo docker exec -it gitlab-runner gitlab-ci-multi-runner start

此时在 gitlab WEB 界面可以看到 Runner正常运行 (Runner 旁边有绿色的灯亮起)

完成上述步骤后,只要进行代码提交, gitlab 就会运行 runner 执行 .gitlab-ci.yml 中设置的 jobs。

参考资料

Getting started with GitLab CI/CD
Docker搭建自己的Gitlab CI Runner
Continuous Integration, Delivery, and Deployment with GitLab