部署gitlab-runner服务

Posted by 刘勇(lyonger) on 2020-06-18

安装GitLab Runner

  • GitLab Runner支持多平台、多方式安装,包括GNU/Linux, macOS, FreeBSDWindows平台的安装,以及支持基于docker的自动扩展式安装。受限于Gitlab版本,Gitlab-runner的版本最好和Gitlab的版本保持一致。注意gitlab-runner的前身名字叫gitlab-ci-multi-runner,为了避免一些不必要的冲突,官方建议使用gitlab-runner这个工具来进行安装。

安装docker

如果runner需要支持docker系列的执行器,也就是构建需要在容器里执行,那么需要先安装docker环境,docker安装方式建议参考官网:https://docs.docker.com/engine/install/

1
2
3
curl -sSL https://get.docker.com/ | sh
/etc/init.d/docker status
[ ok ] Docker is running.

安装gitlab-runner

  • 使用GitLab官方源来安装runner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 添加gitlab官方源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

# 添加APT pinning配置文件
cat > /etc/apt/preferences.d/pin-gitlab-runner.pref <<EOF
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
EOF

# 安装gitlab-runner
apt-get update
apt-get install gitlab-runner=={gitlab后段版本号} # 比如apt-get install gitlab-runner=11.11.4

# 授权gitlab-runner用户使用docker
usermod -aG docker gitlab-runner

# 查看授权,gitlab-runner用户下执行
docker info #查看是否有授权

# 更改默认docker的文件目录,注意docker17版本以后,不支持graph参数指定目录。
service docker stop
cat /etc/default/docker
DOCKER_LOGFILE="/home/gitlab-runner/var/log/docker.log"
DOCKER_OPTS="--graph=/home/gitlab-runner/var/lib/docker --log-opt max-size=500m --log-opt max-file=5"

# 启动docker
service docker start

注册runner

  • runner注册到gitlab服务器,注册成功会产生一个runner实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@gitlab-f1-1000:~# gitlab-runner register
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.test.com/ci # 输入需要注册到的gitlab服务器地址
Please enter the gitlab-ci token for this runner:
xxxxxxxxxx # 项目Runner页面的 Runner Registration token
Please enter the gitlab-ci description for this runner:
[gitlab-f1-1000.i.nease.net]: mac-runner-1 # runner的名称
Please enter the gitlab-ci tags for this runner (comma separated):
docker # 用于pipeline job匹配runner的tag
Registering runner... succeeded runner=xxxxx
Please enter the executor: docker, shell, virtualbox, docker-ssh+machine, kubernetes, docker-ssh, parallels, ssh, docker+machine:
docker # runner执行器
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
  • 这里注册了一个执行器为shellrunnerhttps://gitlab.test.com/,注册完后,可以在项目的Runners页面看到已经注册的runner

注意

  • couldn’t execute POST against https://gitlab.test.com/ci/api/v1/runners/register.json
    这个是因为在注册时,runner所在的机器无法访问gitlab服务器导致。
  • 某些机器版本gitlab-ci-multi-runner工具注册可能有问题,返回status 404,此时可以使用gitlab-runner命令行工具来尝试注册。

配置runner

确定runner配置文件

  • 安装好runner后,即会生成一份runner的配置文件,不同系统平台配置文件路径为:

    • 以root用户安装的,且为 *nix 类系统(如Debian)配置文件路径为/etc/gitlab-runner/config.toml
    • 以非root用户安装的,且为 *nix 类系统(如Debian)配置文件路径为~/.gitlab-runner/config.toml
    • 其他系统 ./config.toml
  • 修改runner配置文件时会自动更新生效,无需重启runner服务。

配置runner使用docker

  • 当注册了一个docker类型的runner后,如果要在该runner中使用docker进行构建等任务,则需要增加以下配置,以支持docker in docker:
1
2
3
4
5
# 挂载宿主docker.sock到容器内,修改对应runner的volumes配置
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]

# 挂载镜像registry的认证文件到容器内,如果要拉取私有镜像,则需要在容器内部署认证配置,或者在宿主配置,然后挂入容器内。修改对应runner的volumes配置
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock", "/root/.docker/config.json:/root/.docker/config.json"]

全局配置

  • 在创建好的runner的配置之前的配置为全局配置:
1
2
3
4
5
concurrent     #全局并发设置,表示使用所有runner全局可以并行运行的构建数,注意"0"并不是表示没有限制

check_interval # 检查新构建任务的间隔时间,单位为秒。默认为3s,如果该值被设置为小于等于0,则使用默认值

log_level # 日志级别,如warning、debug等

runner局部配置

  • [[runner]]里的配置即为具体创建的runner实例的配置,具体可参考:https://docs.gitlab.com/runner/configuration/advanced-configuration.html

启动runner

  • 注意安装了runner以后,默认会自动启动,手工启动方式为
1
gitlab-runner start


支付宝打赏 微信打赏

赞赏一下