Gitlab Runner的安装与注册

Gitlab Runner的安装与注册

1.访问项目的gitlab页面获取token

Settings -> CI/CD -> Runners

获取到当前项目的key,如下图所示:

此时我们就可以拿到对应的token了

2. 安装gitlab runner

官网安装教程:https://docs.gitlab.com/runner/install/

建议是安装到CentOS服务器上

  1. 添加源
    1
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
  2. 通过包管理工具安装
    1
    sudo yum install gitlab-runner
    默认会安装最新的版本,如果需要安装特定版本则可以通过以下命令实现
    1
    2
    yum list gitlab-runner --showduplicates | sort -r
    sudo yum install gitlab-runner-10.0.0-1

3. 注册gitlab runner

1
sudo gitlab-runner register

需要输入项目所在的gitlab地址,类似于https://gitlab.xxx.com
回车过后需要输入项目的token,也就是我们在第一步中获取到的
后面会要求输入一些描述,紧接着是tag,这个可以用于.gitlab-ci.yml文件中指定具体的runner,可以认为tag就是这个当前注册runner的身份ID。最后是选择执行器,初级选手,只会使用shell,其他相关的请看EXECUTORS执行器简单介绍

另,一台服务器可以注册多个gitlab runner

EXECUTORS执行器简单介绍

执行者 描述
shell 在本地运行构建,默认
docker 使用Docker容器运行构建 - 这需要在Runner运行的系统上安装[runners.docker]和Docker Engine
docker-ssh 运行生成使用泊坞容器,但用SSH连接到它-这需要的存在[runners.docker],[runners.ssh]以及码头工人引擎的亚军运行的系统上安装。注意:这将在本地计算机上运行docker容器,它只是更改命令在该容器内运行的方式。如果要在外部计算机上运行docker命令,则应更改host该runners.docker部分中的参数。
ssh 使用SSH远程运行构建 - 这需要存在 [runners.ssh]
parallels 使用Parallels VM运行构建,但使用SSH连接到它 - 这需要存在[runners.parallels]和[runners.ssh]
virtualbox 使用VirtualBox VM运行构建,但使用SSH连接到它 - 这需要存在[runners.virtualbox]和[runners.ssh]
docker+machine 喜欢docker,但使用自动缩放的Docker机器 - 这需要存在[runners.docker]和[runners.machine]
docker-ssh+machine 喜欢docker-ssh,但使用自动缩放的Docker机器 - 这需要存在[runners.docker]和[runners.machine]
kubernetes 使用Kubernetes Pods运行构建 - 这需要存在 [runners.kubernetes]

shell执行器补充

shell执行器是根据当前gitlab runner所安装的操作系统来决定的

shell 描述
bash 生成Bash(Bourne-shell)脚本。在Bash上下文中执行的所有命令(所有Unix系统的默认值)
sh 生成Sh(Bourne-shell)脚本。Sh上下文中执行的所有命令(适用bash于所有Unix系统的后备)
cmd 生成Windows批处理脚本。所有命令都在批处理上下文中执行(Windows的默认值)
powershell 生成Windows PowerShell脚本。所有命令都在PowerShell上下文中执行

.gitlab-ci.yml基本语法

以下内容暂时只针对shell执行器

config.toml基本配置

官方文档介绍:https://docs.gitlab.com/runner/configuration/advanced-configuration.html

全局配置

关键字 描述
concurrent 限制全局可以同时运行的作业数。使用所有已定义的运行者的作业的最大上限。0并不是指无限制,如果服务器性能还不错,可以尝试给个5
log_level 日志级别(选项:调试,信息,警告,错误,致命,恐慌)。请注意,此设置的优先级低于命令行参数设置的级别--debug-l--log-level
log_format 日志格式(选项:runner,text,json)。请注意,此设置的优先级低于命令行参数设置的格式--log-format
check_interval 定义新作业检查之间的间隔长度(以秒为单位)。默认值为3; 如果设置为0或更低,将使用默认值。
sentry_dsn 启用跟踪哨兵的所有系统级错误
listen_address 地址(<host>:<port>),Prometheus指标HTTP服务器应该在其上监听

[session_server]介绍

此项配置应在[[runners]]外部指定,主要包含以下参数

设置 描述
listen_address 用于会话服务器的内部URL。
advertise_address Runner将向GitLab公开的URL,用于访问会话服务器。listen_address如果没有定义,则回退到。
session_timeout 作业完成后会话可以保持活动状态的多长时间(这将阻止作业完成),默认为1800(30分钟)。

其中listen_addressadvertise_address需要以host:port形式提供,其中host可以是IP地址,也可以是域名。

示例:

1
2
3
4
[session_server]
listen_address = "0.0.0.0:8093" # listen on all available interfaces on port 8093
advertise_address = "runner-host-name.tld:8093"
session_timeout = 1800

[[runners]]介绍

一个config.toml文件允许存在多个[[runners]],也就对应了上文中提到的一个服务器允许注册多个gitlab runner
相关配置参数介绍如下表所示:

设置 描述
name Runner的描述,只是提供信息
url GitLab URL
token Runner的特殊令牌(不要与注册令牌混淆)
tls-ca-file 包含证书的文件,用于在使用HTTPS时验证对等方
tls-cert-file 包含证书的文件,以便在使用HTTPS时与对等方进行身份验证
tls-key-file 包含私钥的文件,用于在使用HTTPS时与对等方进行身份验证
limit 限制此令牌可同时处理的作业数。0(默认)仅表示不限制
executor 选择应如何构建项目
shell 用于生成脚本的shell的名称。默认值取决于平台。
builds_dir 构建将存储在所选执行程序的上下文中的目录(本地,Docker,SSH)
cache_dir 构建缓存的目录将存储在所选执行程序(本地,Docker,SSH)的上下文中。如果使用docker执行程序,则此目录需要包含在其volumes参数中。
environment 附加或覆盖环境变量
request_concurrency 限制GitLab新作业的并发请求数(默认值为1)
output_limit 设置最大构建日志大小(以KB为单位),默认设置为4096(4MB)
pre_clone_script 在克隆Git存储库之前要在Runner上执行的命令。例如,这可以用于首先调整Git客户端配置。要插入多个命令,请使用(三引号)多行字符串或“\ n”字符。
pre_build_script 在克隆Git存储库之后但在执行构建之前要在Runner上执行的命令。要插入多个命令,请使用(三引号)多行字符串或“\ n”字符。
post_build_script 在执行构建之后但在执行之前要在Runner上执行的命令after_script。要插入多个命令,请使用(三引号)多行字符串或“\ n”字符。
clone_url 覆盖GitLab实例的URL。如果Runner无法连接到GitLab上的GitLab暴露自己,则使用。
debug_trace_disabled 禁用该CI_DEBUG_TRACE功能。设置为true时,即使用户CI_DEBUG_TRACE将设置为调试跟踪,也将保持禁用状态true。

示例:

1
2
3
4
5
6
7
8
9
10
[[runners]]
name = "ruby-2.1-docker"
url = "https://CI/"
token = "TOKEN"
limit = 0
executor = "docker"
builds_dir = ""
shell = ""
environment = ["ENV=value", "LC_ALL=en_US.UTF-8"]
clone_url = "http://gitlab.example.local"