介绍

  • Gitlab Runner 是一个开源项目,用于运行作业并将结果返回给 gitlab。Gitlab Runner 通常于 gitlab CI 结合使用,Gitlab CI 是 gitlab 用于协调作业的开源持续集成服务。
  • Gitlab Runner 是用 go 编写的,可以在 linux、mac、wins 上运行,容器部署需要使用最新 docker 版本,Gitlab Runner 需要最低的 docker 版本为 1.13.0
  • Gitlab Runner 最好与 gitlab 版本一致,避免因为版本不一致导致差异化
  • 可以根据需要配置任意数量的 Runner

Gitlab Runner 有下面几种类型

  • shared:共享类型,运行整个平台项目的作业(gitlab)
  • group:项目组类型,运行特定 group 下的所有项目的作业(group)
  • specific:项目类型,运行指定的项目作业(project)

Gitlab 的状态

  • locked:锁定状态,无法运行项目作业
  • paused:暂停状态,暂时不会接收新的作业

安装 Gitlab Runner

因为我安装的 gitlab 的版本是 14.8,所以我这里也安装 14.8 的 Gitlab Runner,可以去 dockerhub 去搜索:https://hub.docker.com/r/gitlab/gitlab-runner/tags

下载镜像,如果下载慢,需要先设置加速

// 下载镜像
docker pull gitlab/gitlab-runner:v14.8.3

启动镜像

// 启动镜像,映射到本地
docker run -itd --restart=always --name gitlab-runner \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner:v14.8.3

查看版本

[root@dce-10-6-215-10 ~]# docker exec -it gitlab-runner bash
root@55c90539459e:/# gitlab-runner -v
Version:      14.8.3
Git revision: 16ae0625
Git branch:   14-8-stable
GO version:   go1.17.7
Built:        2022-05-02T16:47:21+0000
OS/Arch:      linux/amd64

gitlab--Gitlab Runner安装与注册_配置文件

这样我们就安装好了对应版本的 Gitlab Runner

GitLab Runner注册

注意:注册 gitlab-runner 的前提是必须有一个可以使用的 gitlab 仓库

获取 token

上面我们说了 runner 有三种类型,分别是 shared、group、specific

  • shared 是所有只有标签匹配 job 都可以运行在这个 runner 上
  • group 是只有这个项目组下的项目可以使用的 runner,当前这个项目组下的项目也可以使用 shared 类型的项目
  • specific 是只有这个项目才可以使用这个 runner,当前这个项目也可以使用 group 和 shared 类型的项目
获取 shared 类型的 token

点击菜单--管理员--左边点击 runner,可以看到界面右边有 注册一个实例 runner。这里的 token 用于后面 runner 的注册使用

gitlab--Gitlab Runner安装与注册_docker_02

gitlab--Gitlab Runner安装与注册_git_03

获取 specific 类型的 token

获取 specific 类型的话,首先需要有个项目,进入到项目里面

gitlab--Gitlab Runner安装与注册_git_04

点击 runner 后面的展开

gitlab--Gitlab Runner安装与注册_docker_05

获取 group 类型的 token

首先要有一个 group,可以自己去创建一个

gitlab--Gitlab Runner安装与注册_docker_06

创建完群组之后,进入到群组里面

gitlab--Gitlab Runner安装与注册_docker_07

点击 【带我去那里!】

gitlab--Gitlab Runner安装与注册_配置文件_08

注册 runner

上面我们已经获取到了三种类型的 runner,可以根据项目的需要,注册不同的 runner

由于 runner 是采用 docker 安装,因此注册的时候需要进入到 runner 的容器中进行

# 进入容器
[root@dce-10-6-215-10 ~]# docker exec -it gitlab-runner bash

# 注册 runner
root@55c90539459e:/# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=48 revision=16ae0625 version=14.8.3
Running in system-mode.

# 输入 gitlab 的地址
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://10.6.215.220/

# 输入 gitlab 上的 token,就是上面的
Enter the registration token:
osG39v5FQQ63nvk5xucx

# 输入描述信息
Enter a description for the runner:
[55c90539459e]: build runner

# 输入标签,这个gitlab-runner输入一个标记,这个 tag 非常重要,在后续的使用过程中需要使用这个 tag 来指定 gitlab-runner
Enter tags for the runner (comma-separated):
build
Enter optional maintenance note for the runner:
Registering runner... succeeded                     runner=osG39v5F

# 选择执行器,我选的是 shell
Enter an executor: ssh, virtualbox, docker-ssh+machine, kubernetes, custom, parallels, shell, docker, docker-ssh, 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
root@55c90539459e:/# gitlab-runner restart
Runtime platform                                    arch=amd64 os=linux pid=59 revision=16ae0625 version=14.8.3

# 查看注册的 runer 列表
root@55c90539459e:/# gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=94 revision=16ae0625 version=14.8.3
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
build runner                                        Executor=shell Token=FxAMy8dUXRjy1AP3VKxx URL=http://10.6.215.220/
root@55c90539459e:/#

注册成功后,刷新 gitlab 的页面,可以看到我们刚才注册的 runner

gitlab--Gitlab Runner安装与注册_docker_09

runner 注册完成后会在容器的 /etc/gitlab-runner 目录下生成一个 config.toml 的文件。这个就是 runner 的配置文件。因为在安装 runner 的时候我们已经将配置文件的目录通过挂载的形式映射到了宿主机目录:/data/gitlab-runner/config 下,所以后续如果需要更新 runner 配置文件可以直接在宿主机上进行修改。并且在宿主机上进行修改 runner 配置文件不需要重启 runner。它会每5分钟检查一次文件自动获取所有更改。包括该 [[runners]] 部分中定义的任何参数以及全局部分中的大多数参数(除外)listen_address。

配置文件内容如下

concurrent = 1 # 可并行运行作业的数量,0 表示不限制
check_interval = 0  # 检查新作业的时间间隔,0 表示 3 秒

[session_server] # 允许用户与作业进行交互
  session_timeout = 1800

[[runners]] # 如果有多个 runners,就会有多个 [[runners]]
  name = "build runner" # Runner 名称
  url = "http://10.6.215.220/" # gitlab 的地址
  token = "FxAMy8dUXRjy1AP3VKxx" # gitlab 上的 token
  executor = "shell" # Runner 的执行器
  [runners.custom_build_dir] # 允许用户为作业定义自定义构建目录
  [runners.cache] # 分布式缓存目录
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]

gitlab runner 非交互式注册

上面我们是用的交互式进行注册的,也可以采用非交互式注册

进入到 runner 容器里面

# 进入容器
[root@dce-10-6-215-10 ~]# docker exec -it gitlab-runner bash

注意:替换你的 url 和 token

gitlab-runner register \
    --non-interactive \
    --url "http://10.6.215.220/" \
    --registration-token "osG39v5FQQ63nvk5xucx" \
    --executor "shell" \
    --description "buildrunner" \
    --tag-list "build,k8s,go" \
    --run-untagged="true" \
    --locked="false" \
    --access-level="not_protected"

其他参数

-c value, --config value                   # 指定配置文件
   --template-config value                    # 指定模板配置文件
   --tag-list value                           # 指定runner的标签列表,逗号分隔
   -n, --non-interactive                      # 无交互进行runner注册 
   --leave-runner                             # 如果注册失败,不用删除runner 
   -r value, --registration-token value       # runner的注册token
   --run-untagged                             # 注册运行未加标签的构建,默认当标签列表为空时值为true
   --locked                                   # 锁定runner 默认true,锁定后就不能运行 job 了
   --access-level value                       # 设置访问等级 not_protected or ref_protected; 默认 not_protected 
   --maximum-timeout value                    # 为作业设置最大运行超时时间 默认零 单位秒
   --paused                                   # 设置runner为 paused,默认 'false' 
   --name value, --description value          # Runner 名称 
   --limit value                              # 程序处理的最大构建数量default: "0"
   --output-limit value                       # 最大的构建大小单位kb default: "0"
   --request-concurrency value                # 作业请求的最大并发数 default: "0"
   -u value, --url value                      # GitlabCI服务器地址
   -t value, --token value                    # GitlabCI服务器token

运行完成之后重启 runner

# 重启 runner
root@854549fefddd:/# gitlab-runner restart

gitlab--Gitlab Runner安装与注册_配置文件_10

在去刷新页面

gitlab--Gitlab Runner安装与注册_配置文件_11

gitlab Runner 安装好之后就可以运行 CI 了

注册 docker 执行器的 runner


如果你注册的 docker 执行器的 runner 运行 job 时报下面的错误

gitlab--Gitlab Runner安装与注册_docker_12

原因是因为:启动 runner 时未将本地 docker.sock 文件挂载到容器,容器中无法调用宿主机 docker 环境

解决办法,修改启动参数,例如

# 使用 -v 要挂载
docker run -itd --restart=always --name gitlab-runner \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner:v14.8.3

然后重新注册 runner 即可

常用命令

gitlab-runner register  # 默认交互模式下使用,非交互模式添加 --non-interactive
gitlab-runner list      # 此命令列出了保存在配置文件中的所有运行程序
gitlab-runner verify    # 此命令检查注册的 runner 是否可以连接,但不验证 GitLab 服务是否正在使用 runner。--delete 删除
gitlab-runner unregister   # 该命令使用 GitLab 取消已注册的 runner。


# 使用令牌注销
gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n

# 使用名称注销(同名删除第一个)
gitlab-runner unregister --name test-runner

# 注销所有
gitlab-runner unregister --all-runners

服务管理

# --user指定将用于执行构建的用户
# --working-directory  指定将使用 **Shell** executor 运行构建时所有数据将存储在其中的根目录
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

gitlab-runner uninstall #该命令停止运行并从服务中卸载 GitLab Runner。

gitlab-runner start     #该命令启动 GitLab Runner 服务。

gitlab-runner stop      #该命令停止 GitLab Runner 服务。

gitlab-runner restart   #该命令将停止,然后启动 GitLab Runner 服务。

gitlab-runner status #此命令显示 GitLab Runner 服务的状态。当服务正在运行时,退出代码为零;而当服务未运行时,退出代码为非零。