简介
GitLab Runner
是一个开源项目,用于运行您的作业并将结果发送回 GitLab
。它与 GitLab CI
一起使用,GitLab CI
是 GitLab
随附的开源持续集成服务,用于协调作业。
简单理解就是一个服务放在那儿,当你提交代码时,会触发一个开关,然后在那个服务上执行一下相应的脚本。
通常用于代码检测,编译,服务部署等。
安装
linux
- 使用脚本,通过
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
windows
直接去官网下载编译好的 exe
注册
需要从 gitlab
的网页上,选择 settings->CI/CD->Runners
,就可以看到注册所需要的 AURL
和 token
。
然后执行 gitlab-runner register
,照着提示输入即可。
gitlab-runner list
可查看运行中的 runner
.gitlab-ci.yml 语法
官方文档上的内容很详细,可以直接上官网查看,这里仅提一些较常用的,先看一个例子:
#定义变量
#变量的读取顺序: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
文件
但是实际使用的过程中总会遇到各种各样的问题,可以先搞个测试仓库先研究研究。
参考
- 官方文档
- .gitlab-ci.yml 自定义多个stages. CI/CD 自定义多个阶段的执行顺序