gitLab 之 Runner

Gitlab CI Runner安装以及如何跑项目构建流程。

1. 安装、注册并启动Gitlab Runner

Gitlab Runner安装方式有两种,一种是直接二进制文件安装,一种是基于docker镜像安装。

1. 下载对应操作系统的二进制包,我这里使用的是mac版本
1
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64
1
2
3
4
 # For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
```
##### 2. 给gitlab-runner赋可执行权限

sudo chmod +x /usr/local/bin/gitlab-runner

1
##### 3 注册runner

gitlab-runner register

Please enter the gitlab-ci coordinator URL:

示例:http://gitlab.alibaba-inc.com/ci

Please enter the gitlab-ci token for this runner:

xxxxxx

Please enter the gitlab-ci description for this runner:

示例:qd_api_runner

Please enter the gitlab-ci tags for this runner (comma separated):

示例:hwy

Whether to run untagged builds [true/false]:

true

Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:

docker

Please enter the default Docker image (e.g. ruby:2.1):

maven:3-jdk-8

1
2
3
4
5
6
7
说明: 
1. gitlab ci的地址以及token,从你要配置该runner到哪个项目,就去gitlab下该项目首页右侧设置—》CI/CD Pipelines—》Specific Runners下可以找到。
2. gitlab-ci tags这个很重要,在项目构建流程yaml文件里面指定tag,就是匹配使用哪个tag的runner,这里我定义了hwy,回头再配置文件里面就指定这个tag。
3. executor:执行者可以有很多种,这里我们使用docker,方便构建执行。
4. Docker image:构建Docker image时填写的image名称,根据项目代码语言不同,指定不同的镜像。我这里项目是java语言的,所以我使用官方maven:3-jdk-8镜像。

##### 4. 安装并启动gitlab-runner

cd ~
gitlab-runner install
gitlab-runner start
`

注册gitlab-runner时,提示报错:
GitLab Runner >= 9.0 can be used ONLY with GitLab CE/EE >= 9.0
这个因为默认gitlab runner安装时最新版的,与我们正在使用的gitlab版本不匹配,那么我们找到匹配的gitlab-runner版本安装即可,从这里我们可以找到 Runner和GitLab CE / EE兼容性列表
有时runner会连接不上,或者在项目仓库->设置->runner里呈灰色,这有可能是runner机器上没有启动gitlab-runner引起的,可以执行ps -ef | grep gitlab看看是否存在gitlab-runner的进程,如果没有则执行gitlab-runner start 命令启动runner服务。
若已经配置好了gitlab-runner了,执行commit,pipeline状态一直是pending,并且提示:
This build is stuck, because the project doesn’t have any runners online assigned to it. Go to Runners page
这个是因为未找到对应的runner导致的,原因一是有可能gitlab-runner注册失败,原因二有可能是.gitlab-ci.yml配置文件里面tags没有匹配到已注册可用的runner。
每次maven:3-jdk-8去执行build和test都会重新拉取镜像,下载依赖的jar包,比较耗时耗资源。这是因为docker image每次构建都是在独立的container里, maven的 .m2文件并不会被多次构建公用,这里我们可以通过修改gitlab-runner的配置,将maven .m2目录加到volumes中,并增加镜像拉取规则(默认是从远程拉取镜像,这里修改为优先获取本地镜像,不存在时才去远程拉取镜像)