Gitlab持续集成/持续发布(CI/CD)配置
在使用Gitlab管理源码的同时,还可以让其自动构建、测试与发布,这部分功能与jenkins类似。
但是与Jenkins不同的是:
Jenkins要构建一般是定时或者手动触发,所以存在代码未更新,但也在构建,因为时间到了,或者代码提交了,未及时构建,需要手动去构建。这一切都是因为Jenkis不知道代码变更了,它只是一个集成工具,没有代码管理功能。
而Gitlab具有先天优势,它本身就是一个代码管理工具,它知道代码是否更新,所以可以做到只有在代码更新时才去构建。
另外Jenkins中的控制台与Linux的控制台显示有些差异,特别是颜色方面的,不知道新版本是否有改善;而gitlab-runner中对控制台的显示很友好,可以参见后面的截图。
一、安装相应软件
1.安装Gitlab,
参见前面的博客:Centos 安装配置gitlab
2.安装gitlab-runner
同样可以在清华大学的镜像中下载:
CentOS 6:gitlab-runner-12.9.0-1.x86_64.rpm
然后如下图所示,输入:
rpm -ivh gitlab-runner-12.9.0-1.x86_64.rpm
如果没有安装git,需要先安装git:
yum install -y git

二、配置
1. 注册Runner
安装完成gitlab以及gitlab-runner后,在gitlab的Web页面打开项目的[设置]=>[CI/CD],展开Runner

可以看到有以下几个选择:
- 自动设置Runner
需要安装和配置Kubernetes集群,稍复杂 - 共享Runner
共享Runner即各个项目都可以使用它来执行作业。 - 手动设置特定Runner
项目特用,即只为该项目服务。 - 群组Runner
群组特用,即只为该群组的项目服务
我们以手动设置特定的Runner为例,来说明如何配置Runner让其正常工作。
使用:
gitlab-runner register
或者:
gitlab-ci-multi-runner register
来注册Runner。
Runtime platform arch=amd64 os=linux pid=16390 revision=4c96e5ad version=12.9.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.129/ #输入gitlab手动设置Runner中的地址,使用上图中4处按钮复制的链接
Please enter the gitlab-ci token for this runner:
VJzexe7WU6FE4NmJxVJQ #输入上图中5处按钮复制的令牌
Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: #Runner描述,可以直接回车使用默认值
Please enter the gitlab-ci tags for this runner (comma separated):
build #Runner的标识,这个很重要,后面要用到
Registering runner... succeeded runner=VJzexe7W
Please enter the executor: docker-ssh, shell, ssh, docker-ssh+machine, kubernetes, custom, docker, parallels, virtualbox, docker+machine:
shell #执行环境
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

注册成功后,使用
gitlab-runner start
运行。现在可以在Web页面中看到刚才添加的Runner:

如果注册Runner后,想要做一些修改怎么办?
可以通过上图红框中的锁后面的书写按钮进行修改。
管理员账号也可以通过导航栏上的[小扳手]进入[管理中心]=>[概览]=>[Runner],如下图:

修改完成后记得保存修改。
2. 添加yml脚本
Gitlab在作者提交代码时,会有机制触发事件,为了让代码执行相应的事件,Gitlab是通过编写yml脚本来实现的,Gitlab默认的脚本名为:.gitlab-ci.yml,需要放在项目的根目录下。
下面的.gitlab-ci.yml示例为C++项目的编译作业:
stages:
- cleanup
- build
cleanup:
stage: cleanup
script:
- cd Server
- rm build -rf
tags:
- build
build:
stage: build
script:
- cd Server
- mkdir -p build
- cd build
- cmake ..
- make -j2
tags:
- build
关于yml的语法可以参考官网。但是需要注意的是一定要指定 tags,以绑定Runner,不然无法执行。
Gitlab有一个语法检测页面:


这样设置后,只要在Gitlab推送后,就会触发作业,自动清除之前的编译,然后再重新编译。

我们在推送时可能只是改了一些配置文件,并没有修改任何代码,此时就不需要编译代码,所以可以在只有代码变更时才触发,可以把前面的.gitlab-ci.yml修改为:
stages:
- build
build:
stage: build
script:
- cd Server
- mkdir -p build
- cd build
- rm * -rf
- cmake ..
- make -j2
tags:
- build
only:
changes:
- "Server/**/*.{c,cpp,cc,h,hpp,cxx,C}"
- "Server/**/CMakeLists.txt"
- "Server/CMakeLists.txt"
即:只有修改了Server下任意目录中的.c、.cpp、.cc、.h、.hpp、.cxx、.C文件以及CMakeLists.txt文件才会触发编译代码。
更多推荐
所有评论(0)