在使用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文件才会触发编译代码。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐