GitLab 实现 C++ 项目持续集成
Gitlab 集成了 CI / CD (Continuous Integration,持续集成 /
Continuous Delivery,持续交付)功能。下图是 gitlab 官网上有关 ci / cd 各阶段的图示:
本文重点讲述如何利用 gitlab 实现 c++ 项目的持续集成。
安装 gitlab runner
为了利用 gitlab 实现 ci / cd,需要安装 gitlab runner,gitlat runner 用于执行 ci / cd 任务。Gitlab runner 可以部署在与 gitlab 不同的机器,本文采用 docker 方式安装 gitlab runner。
Gitlab runner 的 docker-compose.yml 文件如下:
1 | version: '3' |
为保存 gitlab runner 容器已注册的 runner 数据,将 gitlab runner 的配置文件 config.toml
保存在宿主机。config.toml
可以从 gitlab runner 容器中拷贝出来,例如:
1 | concurrent = 1 |
启动 gitlab runner:
1 | docker-compose up -d |
注册 runner
在 gitlab 上创建一个新的项目,例如 gitops
,进行 runner 的注册页面: Settings - CI / CD - Runners settings。如下图所示,重点关注第 2 步的 url 以及第 3 步的 token 值。
回到已安装好 gitlab runner 的机器,执行命令注册 runner:
1 | docker exec -it gitlab-runner gitlab-runner register |
出现提示:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
输入上图第 2 步的 url。
接着,出现提示:
Please enter the gitlab-ci token for this runner:
输入上图第 3 步的 token。其他各提示根据实际填写,重点关注执行器的选择:
Please enter the executor: custom, docker, parallels, ssh, virtualbox, docker-ssh, shell, docker+machine, docker-ssh+machine, kubernetes:
本文选择 ssh 执行器,填写 C++ 项目所在机器 ssh 的 ip ,端口,用户,密码,完成 runner 的注册。
完成注册后,项目的 Runners settings 显示已成功注册的 runner:
这时,打开 gitlab runner 的配置 config.toml
,也可以看到新注册的 runner:
1 | concurrent = 1 |
c++ 项目持续集成
需要编译的 c++ 源代码如下,该源代码会在控制台打印出一行 hello 问候语:
1 |
|
正常来说,为了得到 c++ 可执行文件,需要经过编译联接过程,可以通过手工执行命令来进行编译联接操作。这里我们采用 gitlab ci 功能,当向 gitlab push 源码时,自动实现 c++ 源代码的编译构建。
完整的源代码可以在 github 获取:链接,其中各源代码的作用:
.gitignore
: 用于告诉 git 忽略的文件.gitlab-ci.yml
: 告诉 gitlab 如何进行编译构建部署CMakeLists.txt
: cmake 用于描述编译构建过程main.cpp
: 需要编译构建的源代码,在控制台输出 hello 问候README.md
: 项目简介文件
gitlab 使用 .gitlab-ci.yml
文件来实现 ci / cd。这个文件需要位置 gitlab 仓库的根目录。当用户进行源代码的 push 操作后,gitlab 会查找 .gitlab-ci.yml
文件,由 gitlab runner 执行里面定义的任务 (job)。
本文使用的 .gitlab-ci.yml
如下,stages
用于定义包含的任务阶段,这里为方便演示,仅定义了一个 build stage。有关 stages
的使用,可以参考官方文档 stages。
1 | stages: |
script
用于定义需要执行的命令,先创建 build
目录,然后在 build
目录进行 cmake 操作,最后使用 make
生成可执行文件,并将该可执行文件复制至 /root
目录。
cmake 使用的 CMakeLists.txt
文件如下,有关 cmake 语法细节,可以参考:
cmake 语言 15 分钟入门教程。
1 | cmake_minimum_required (VERSION 2.8) |
对项目源代码进行 push 操作,可以看到触发了 .gitlab-ci.yml
定义的任务:
还可以查看构建过程中输出的日志:
参考资料
- https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/
- https://docs.gitlab.com/runner/
- https://docs.gitlab.com/runner/register/index.html#docker
- https://docs.gitlab.com/ee/ci/quick_start/README.html
- https://docs.gitlab.com/ee/ci/yaml/README.html
- https://mklimenko.github.io/english/2020/02/02/gitlab-ci-cpp/
- https://stackoverflow.com/questions/36814259/i-need-help-setting-up-a-gitlab-ci-yml-file-for-c