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(指定型)。
1、linux操作系统,安装docker环境。(如果安装了devops,docker环境可以不用安装)
2、安装gitlab-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
安装好Runner之后,需要向Gitlab进行注册,注册Runner需要GitLab-CI的url和token。可根据需求注册选择所需类型Runner。这里介绍spercific runners为例
图中的Url和Token是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-CI会为这个Runner生成一个唯一的token,以后Runner就通过这个token与GitLab-CI进行通信。
那么,问题来了。注册好了的Runner的信息存放在哪儿了呢?
原来,Runner的信息是存放在一个配置文件里面的,配置文件的格式一般是.toml。这个配置文件的存放位置有以下几种情况:
配置文件默认在当前工作目录下./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注册完成之后还不行,还必须让它运行起来,否则它无法接收到GitLab-CI的通知并且执行软件集成脚本。怎么让Runner运行起来呢?gitlab-runner提供了这样一条命令gitlab-runner run-single
以上的就是在linux机器上直接安装runner的过程,关于gitlab ci怎么使用runner执行我们想要执行的任务,可参考这篇文章: