GitLab Runner 是一个开源项目,用于运行您的作业并将结果发送回 GitLab。它与 GitLab CI 一起使用,GitLab CI 是 GitLab 随附的开源持续集成服务,用于协调作业。
简单理解就是一个服务放在那儿,当你提交代码时,会触发一个开关,然后在那个服务上执行一下相应的脚本。
通常用于代码检测,编译,服务部署等。
yum 安装# 添加yum源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# 安装
yum install gitlab-runner
# 查看版本
gitlab-runner -v
# 我当前centos 7 为 Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64# 设置安装目录可执行
sudo chmod +x /usr/local/bin/gitlab-runner# 直接使用 root 用户权限运行 gitlab-runner (或者其他用户,看需求)
sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner
#启动
sudo gitlab-runner start# 如果提示命令 command not found 需要配置环境
# 添加软链接
ln -s -f /usr/local/bin/gitlab-runner /usr/bin/gitlab-runner# 查看版本
gitlab-runner -v
直接去官网下载编译好的 exe
需要从 gitlab 的网页上,选择 settings->CI/CD->Runners,就可以看到注册所需要的 AURL 和 token。

然后执行 gitlab-runner register,照着提示输入即可。

gitlab-runner list 可查看运行中的 runner
官方文档上的内容很详细,可以直接上官网查看,这里仅提一些较常用的,先看一个例子:
#定义变量
#变量的读取顺序:gitlab 仓库配置的 runner 的 variables -> yml 中定义的 variables -> 环境变量
variables:#定义克隆的路径 $CI_BUILDS_DIR 为 runners.builds_dir 设置的路径GIT_TEST_PATH: ../testTEST_SSH: git@gitlab.com:xxx/test.git# 子模块,添加了这个变量后,子模块就会自动拉取了GIT_SUBMODULE_STRATEGY: recursivebefore_script:- echo "每个 job 执行前都会走"after_script:- echo "每个 job 执行后都会走"# 定义 stage(build, deploy)
stages:- build- deploy# job 名称,随意写
build_job:stage: buildtags:- defaultonly:- devexcept:- mainscript:- if [ ! -d "$GIT_TEST_PATH" ]; then- git clone -b dev $TEST_SSH $GIT_TEST_PATH- else- git -C $GIT_TEST_PATH pull- fi- echo "自己做编译相关脚本"- chmod a+x ./build.sh- ./build.sh #可以直接执行脚本,脚本中也可以获取到先前定义好的变量deploy_job:stage: deploytags:- defaultonly:- devscript:- echo "自己做发布相关脚本"
| 关键字 | 简介 |
|---|---|
variables | 定义变量 |
stage | 定义 job stage(默认:test) |
tags | 用来指定 job 选择哪个 Runner(同时 Runner 也要设置 tags),一个 git 仓库可以指定多个 Runner,一个 job 的 tags 也可指定多个 |
script | 必须要有的,是 Runner 执行的命令或脚本 |
only | 指定分支,只有该分支提交时才执行的 job |
except | 执行 job 的时候排除的分支 |
before_script | 重写一组在作业前执行的命令 |
after_script | 重写一组在作业后执行的命令 |
官方文档
如果出现同名
gitlab 仓库配置的 runner 的 variables

yml 中定义的 variables
variables:GIT_TEST_PATH: ../test
触发变量或预定的流水线变量。项目级别变量或受保护变量。组级别变量或受保护变量。YAML定义的作业级变量。YAML定义的全局变量。部署环境变量。预定义的环境变量。
before_script 每个 job 执行的时候都会走一遍。stage 生成的文件在下个 stage 中能否看到?是看不到的,下个 stage 开始的时候,会重新 checkout 新分支,执行如下:Reinitialized existing Git repository in /home/gitlab-runner/builds/8-Hx8YsC/0/sfg/test/.git/
Checking out 1fdc2396 as dev...
Removing master # mster 这个文件就是上个 stage 生成的被删掉了
git 子模块(具体怎么使用就不在本篇说明了),然后可以配置变量 GIT_SUBMODULE_STRATEGY: recursive 直接更新子模块代码。上面例子中,使用相对路径来克隆模块,也可以使用。job 使用同样的 stage 标签会怎样,相同 stage 标签的 job 会并行执行,没有顺序,但是 stage 会顺序执行,这篇文章的图很直观:.gitlab-ci.yml 自定义多个stages. CI/CD 自定义多个阶段的执行顺序有一定的服务器经验的人来说,搭建 gitlab-runner 并执行 CI 还是挺容易的,耐心看看官方文档,基本上问题都能解决。
docker 或者 本机都行,保证网络连通),并将相应的环境配好。gitlab-runner.gitlab-ci.yml 文件但是实际使用的过程中总会遇到各种各样的问题,可以先搞个测试仓库先研究研究。