DevOps系列文章之 GitLab Runner

Runner

Runner就像一个个的工人,而Gitlab-CI就是这些工人的一个管理中心,所有工人都要在Gitlab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,Gitlab-CI就会通知相应的工人执行软件集成脚本。如下图所示

gitlab里面的runner叫Gitlab-Runner,Gitlab-Runner是配合Gitlab-CI进行使用的。一般地,Gitlab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知Gitlab-CI。这时Gitlab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本(也就是在Job执行流程那个图中所示的第三步:script),所以,Gitlab-Runner就是一个用来执行软件集成脚本script的东西。

Runner类型

Gitlab-Runner可以分类两种类型:Shared Runner(共享型)Specific Runner(指定型)

  • Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
  • Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。

什么情况下需要注册Shared Runner?

  1. 比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。

什么情况下需要注册Specific Runner?

  1. 比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。

Runner搭建

1、linux操作系统,安装docker环境。(如果安装了devops,docker环境可以不用安装)

2、安装gitlab-runner

1. Runner 安装

GitLab Runner 10之前,gitlab-runner的名称叫gitlab-ci-multi-runner,安装命令如下

# For Debian/Ubuntu
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-ci-multi-runner

# For RHEL/CentOS
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
sudo apt-get install gitlab-ci-multi-runner

GitLab Runner 10及其以上,可执行文件已重命名为gitlab-runner

linux系统,可以通过以下命令安装

# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-runner

# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

如果要安装特定版本的GitLab Runner:

# for DEB based systems
apt-cache madison gitlab-runner
export GITLAB_RUNNER_DISABLE_SKEL=true; sudo -E apt-get install gitlab-runner=10.0.0

# for RPM based systems
yum list gitlab-runner --showduplicates | sort -r
export GITLAB_RUNNER_DISABLE_SKEL=true; sudo -E yum install gitlab-runner-10.0.0-1

授予其执行权限:

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

创建一个GitLab CI用户:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

1.解决gitlab-runner执行docker命令提示权限不足的问题
将gitlab-runner用户添加到docker组
sudo usermod -aG docker gitlab-runner
验证是否生效:
sudo -u gitlab-runner -H docker info
2.给gitlab-runner sudo权限
sudo vi /etc/sudoers
root ALL=(ALL:ALL) ALL下增加gitlab-runner ALL=(ALL) NOPASSWD: ALL

2. 获取Runner注册Token

安装好Runner之后,需要向Gitlab进行注册,注册Runner需要GitLab-CI的url和token。可根据需求注册选择所需类型Runner。这里介绍spercific runners为例

在这里插入图片描述

图中的Url和Token是runner链接到仓库的两个重要参数

3.runner配置

执行注册runner的命令(如果你是安装的gitlab-ci-multi-runner):sudo gitlab-ci-multi-runner register

执行注册runner的命令(如果你是安装的gitlab-runner):sudo gitlab-runner register

接下来会提示你输入一系列配置内容

注意,在要求输入tag时,想好tag的名字,这个就相当于你的runner的id

## 输入url
a、Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
 
## 输入token
b、Please enter the gitlab-ci token for this runner
 
## 写个描述
c、Please enter the gitlab-ci description for this runner
 
## 这个tag很重要,好好想个名字并记住,随后在ci配置中需要对应上。
d、Please enter the gitlab-ci tags for this runner (comma separated)
 
## ci没有配置tags时是否执行这个runner?建议采用默认值。            
e、Whether to run untagged builds [true/false]
 
## 是否只对当前工程有效?理论上讲只有“Shared runners”才有效。选true。            
f、Whether to lock Runner to current project [true/false]
 
## 选择一个执行器。我们接来下的方案是基于shell的,输入shell。    
g、Please enter the executor: virtualbox, docker+machine, kubernetes, parallels, docker-ssh, shell, ssh, docker-ssh+machine, docker:

注册完成后,会出现一个runner,我这里注册了两个,所以会有两个tag

runner 左边会有一个小绿点,表示该runner是能正常执行的

Gitlab-runner的配置

GitLab-CI会为这个Runner生成一个唯一的token,以后Runner就通过这个token与GitLab-CI进行通信。

那么,问题来了。注册好了的Runner的信息存放在哪儿了呢?

原来,Runner的信息是存放在一个配置文件里面的,配置文件的格式一般是.toml。这个配置文件的存放位置有以下几种情况:

  • 在类Unix操作系统下(0.5.0之后版本)
    • 如果是以root用户身份运行gitlab-runner register,那么配置文件默认是/etc/gitlab-runner/config.toml
    • 如果是以非root用户身份运行gitlab-runner register,那么配置文件默认是~/.gitlab-runner/config.toml
  • 在其他操作系统下以及0.5.0之前版本

配置文件默认在当前工作目录下./config.toml

一般情况下,使用默认的配置文件存放Runner的配置信息就可以了。当然,如果你有更细化的分类需求,你也可以在注册的时候通过-c或--config选项指定配置文件的位置。具体查看register命令的使用方法:gitlab-runner register --help

问题:如果不运行gitlab-runner register命令,直接在配置文件里面添加Runner的配置信息可以吗?

回答:当然不可以。因为gitlab-ci-runner register的作用除了把Runner的信息保存到配置文件以外,还有一个很重要的作用,那就是向GitLab-CI发出请求,在GitLab-CI中登记这个Runner的信息并且获取后续通信所需要的token。

让注册好的Runner运行起来

Runner注册完成之后还不行,还必须让它运行起来,否则它无法接收到GitLab-CI的通知并且执行软件集成脚本。怎么让Runner运行起来呢?gitlab-runner提供了这样一条命令gitlab-runner run-single

以上的就是在linux机器上直接安装runner的过程,关于gitlab ci怎么使用runner执行我们想要执行的任务,可参考这篇文章: