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 文件如下:

version: '3'
services:gitlab-runner:image: gitlab/gitlab-runner:latestcontainer_name: gitlab-runnerrestart: alwaysvolumes:- /srv/gitlab-runner/config:/etc/gitlab-runner- /var/run/docker.sock:/var/run/docker.sock

为保存 gitlab runner 容器已注册的 runner 数据,将 gitlab runner 的配置文件 config.toml 保存在宿主机。config.toml 可以从 gitlab runner 容器中拷贝出来,例如:

concurrent = 1
check_interval = 0[session_server]session_timeout = 1800

启动 gitlab runner:

docker-compose up -d

注册 runner

在 gitlab 上创建一个新的项目,例如 gitops,进行 runner 的注册页面: Settings - CI / CD - Runners settings。如下图所示,重点关注第 2 步的 url 以及第 3 步的 token 值。

回到已安装好 gitlab runner 的机器,执行命令注册 runner:

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:

concurrent = 1
check_interval = 0[session_server]session_timeout = 1800[[runners]]name = "gitlab ci / cd"url = "http://"********"/"token = ""********""executor = "ssh"[runners.custom_build_dir][runners.cache][runners.cache.s3][runners.cache.gcs][runners.cache.azure][runners.ssh]user = "root"password = "****************"host = "********"port = "22"

c++ 项目持续集成

需要编译的 c++ 源代码如下,该源代码会在控制台打印出一行 hello 问候语:

#include int main() {std::cout << "Hello, leehao.me!!!" << std::endl;return 0;
}

正常来说,为了得到 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。

stages:- buildbuild:stage: buildscript:- echo "Building the executable file"- mkdir build- cd build- cmake ..- make- cp gitops /root/

script 用于定义需要执行的命令,先创建 build 目录,然后在 build 目录进行 cmake 操作,最后使用 make 生成可执行文件,并将该可执行文件复制至 /root 目录。

cmake 使用的 CMakeLists.txt 文件如下,有关 cmake 语法细节,可以参考:
cmake 语言 15 分钟入门教程。

cmake_minimum_required (VERSION 2.8)project(gitops)add_executable(gitops main.cpp)

对项目源代码进行 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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部