1. GitLab Runner版本说明
出于兼容性原因,GitLab Runner major.minor 版本应与 GitLab major.minor 版本保持同步。
较旧的runner可能仍然可以使用较新的 GitLab 版本,反之亦然。但是,如果存在版本差异,功能可能无法使用或无法正常工作。
minor版本更新时,会保障向后兼容性。但是,有时 GitLab 的minor版本更新会引入新功能,这些新功能需要 GitLab Runner 在同一minor版本上。
需要特别注意的是:GitLab Runner 15.0 对注册 API 请求格式进行了更改。它阻止 GitLab Runner 与低于 14.8 的 GitLab 版本通信。我们必须使用适合 GitLab 版本的 Runner 版本,或升级 GitLab 应用程序。
更多内容参考文档GitLab Runner
2. 查看安装教程
2.1. 指定项目的Runner
打开gitlab项目 -> Settings -> CI/CD -> Runners -> Expand -> Show Runner installation instructions
页面的 registration token,用于注册指定项目(当前项目)的runner。
2.2. 共享的Runner
查看Runner:https://gitlab.voidking.com/admin/runners
打开gitlab runner管理页面 -> Show Runner installation instructions
页面的 registration token,用于注册共享runner。
3. TOML语法
gitlab-runner配置文件为config.toml,使用TOML语法。
TOML的目标是成为一种易于阅读的最小配置文件格式。
TOML被设计为明确地映射到哈希表。
TOML应该很容易解析成各种语言的数据结构。
参考文档:
3.1. 注释
#,井号后面表示注释
3.2. 键值对
键名为字符串,值可以为字符串、整数、浮点数、布尔值、日期、时刻、数组、行内表等。
键名在等号的左边,值在等号的右边。
例如:
1  | name = "voidking"  | 
3.3. 表
表的表示方法:方括号+表名,例如[table]。
表是键值对的集合,类似于json中的对象(花括号中内容)。在它下方,直至下一个表头或文件结束,都是这个表的键值对。
顶层表,又被称为根表,于文档开始处开始并在第一个表头(或文件结束处)前结束。
表名的规则和键名的规则相同。
表的层级结构以点.分隔,分隔的每个部分都是一个表名。
定义一个多层级表时,如果最后一个表名前的表没有被创建,那么会被自动创建。
例如:
1  | [table]  | 
3.4. 表数组
表数组表示方法:双层方括号+表名,例如[[fruits]]。
表数组是表的数组,类似于json中的对象数组。
表数组的第一例定义了这个数组及其首个表元素,而后续的每个表数组在该数组中创建并定义一个新的表元素。
1  | [[fruits]]  | 
对应的json格式为:
1  | {  | 
3.5. 缩进
TOML中的缩进没有意义,只是为了方便读者理解层级结构。
4. Linux环境安装Runner
官方文档:Install GitLab Runner
注意:gitlab runner安装包下载地址变化比较频繁,如果下载地址失效,请参考官方文档获取最新的下载地址。
1、安装runner
1  | # Download the binary for your system  | 
PS:其他版本的runner源码和二进制文件,我们还可以在gitlab-runner Releases页面找到。
对于centos系统,可以直接使用rpm包安装。
1  | yum install -y https://gitlab-runner.downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm  | 
2、添加到gitlab-runner到docker用户组(可选)
如果gitlab-runner执行的ci脚本需要运行docker,那么需要将gitlab-runner到docker用户组
1  | sudo usermod -a -G docker gitlab-runner  | 
3、gitlab-runner添加sudo权限(可选)
1  | vim /etc/sudoers  | 
添加配置:
1  | gitlab-runner ALL=(ALL) NOPASSWD: ALL  | 
5. 注册Shell类型Runner
Shell类型的Executor,在Runner程序所在主机上运行CI任务。
前置条件:安装好了Runner。
1  | sudo gitlab-runner register -h  | 
REGISTRATION_TOKEN可以在gitlab页面获取到,详情参考上文【查看安装教程】一节。
根据提示,填写url、token、description、tags(多个tag以英文逗号分隔)、executor类型等信息,这里executor类型填写shell。
6. 注册Docker类型Runner
Docker类型的Executor,在Runner程序所在主机上的Docker容器中运行CI任务。
前置条件:安装好了Runner,而且Runner所在主机已经安装配置好了Docker。
1  | sudo gitlab-runner register --url https://gitlab.voidking.com/ --registration-token $REGISTRATION_TOKEN  | 
根据提示,填写url、token、description、tags、executor类型等信息,这里executor类型填写docker,最后填写一个默认的镜像。
如果一个Shell类型的Runner,想要改成Docker类型的Runner,那么需要取消注册后重新注册。
1  | sudo gitlab-runner stop  | 
7. 注册Docker Machine类型Runner
参考文档:
- Install and register GitLab Runner for autoscaling with Docker Machine
 - Docker Machine Executor autoscale configuration
 - Docker Machine
 - docker-machine的安装与使用
 
7.1. 安装虚拟机驱动
可选驱动:
- virtualbox(推荐),参考文档Linux下使用VirtualBox
 - qemu,参考文档machine-drivers/docker-machine-driver-qemu
 - kvm,参考文档dhiltgen/docker-machine-kvm
 
1、安装virtualbox驱动
1  | yum install https://download.virtualbox.org/virtualbox/6.1.26/VirtualBox-6.1-6.1.26_145957_el7-1.x86_64.rpm  | 
2、安装编译环境
1  | yum install -y kernel-devel kernel-devel install gcc make perl kernel-headers  | 
3、激活virtualbox内核支持
1  | /sbin/vboxconfig  | 
7.2. 安装Docker Machine
1、下载docker-machine二进制文件
1  | wget https://gitlab.com/gitlab-org/ci-cd/docker-machine/-/releases/v0.16.2-gitlab.15/downloads/docker-machine-Linux-x86_64  | 
更多版本可以访问docker-machine/releases页面查找。
2、测试启动虚拟机
1  | docker-machine create -d virtualbox test  | 
7.3. 注册Runner
前置条件:安装好了Runner。
1  | sudo gitlab-runner register --url https://gitlab.voidking.com/ --registration-token $REGISTRATION_TOKEN  | 
根据提示,填写url、token、description、tags、executor类型等信息,这里executor类型填写docker+machine,最后填写一个默认的镜像。
7.4. 配置镜像加速(可选)
参考文档《Docker镜像站的配置和使用》,搭建本地镜像站。
7.5. 配置缓存
1、启动minio容器
1  | docker run -d --name minio \  | 
2、页面访问
http://192.168.56.101:9001/
7.6. 配置Runner
1、修改 /etc/gitlab-runner/config.toml
1  | concurrent = 3  | 
注意:runners.docker.image要指定版本,否则每次构建都会拉取最新版的docker,而最新版本的docker不支持http请求镜像仓库。
更多docker版本可以访问dockerhub - docker获取。
其中MachineOptions中给定的参数,是docker-machine create命令接收的参数。
2、重新启动runner
1  | gitlab-runner restart  | 
7.7. 管理Docker Machine
1  | docker-machine ls  | 
8. K8S环境安装Runner
本节中,我们在K8S中通过helm安装Runner。
参考文档:
- GitLab Runner Helm Chart
 - GitLab Runner Helm Chart - Running Docker-in-Docker containers with GitLab Runner
 - GitLab CI CD | Install and Configure GitLab Runner on Kubernetes with Helm
 - Runner构建优化
 - 在 Kubernetes 上安装 Gitlab CI Runner
 
8.1. 准备存储
通过helm安装runner,values当前还不支持配置storageclass。因此,需要先自行准备好runner的存储。主要参考文档《K8S中安装配置StorageClass》
准备pvc定义 runner-pvc.yaml
1  | apiVersion: v1  | 
8.2. 准备Runner配置
1、添加gitlab repo
1  | helm repo add gitlab https://charts.gitlab.io  | 
2、查看可用的runner版本
1  | helm search repo -l gitlab/gitlab-runner  | 
CHART VERSION有对应的APP VERSION版本,选择需要的APP VERSION版本。
这里选择14.0.0版本,对应CHART VERSION为0.30.0
3、下载chart
1  | helm fetch gitlab/gitlab-runner --version 0.30.0  | 
4、values.yaml修改配置
- image:指定版本gitlab/gitlab-runner:alpine-v14.0.1,更多镜像版本可以访问docker hub查找
 - gitlabUrl:改成我们自己的的gitlab地址
 - runnerRegistrationToken:参考【查看安装教程】一节获取
 - resources:修改申请和限制的资源
 - rbac.create:改成true,创建sa用于创建runner
 - name:改成runner想要在gitlab中显示的名称
 - tags:改成runner想要注册的tags,多个tag以英文逗号分隔
 - replicas:改成runner期望的副本数,这些runner副本使用同一个name。
 - privileged:改成true,启用docker in docker
 - runners.config:支持自定义构建目录,支持docker in docker
 
runners.config内容:
1  | [runners.custom_build_dir]  | 
我们想要对构建缓存使用持久化存储,因此需要添加
1  | ## configure build cache  | 
同时,需要修改gitlab-runner/templates/configmap.yaml
data.entrypoint部分添加runner配置,自动挂载存储
1  | # add build cache and  | 
8.3. 安装Runner
1、安装runner
1  | kubectl create ns gitlab-14-0  | 
2、查看安装
1  | kubectl get all -n gitlab-14-0  | 
3、查看runner注册结果
https://gitlab.voidking.com/admin/runners
找到新的runner,点击右侧的Edit按钮,可以做进一步的配置。
9. 自定义builds路径
参考文档Optimize GitLab for large repositories
1、准备builds目录
1  | mkdir /builds  | 
2、修改runner配置
1  | vim /etc/gitlab-runner/config.toml  | 
添加配置
1  | [[runners]]  | 
3、重启runner
1  | gitlab-runner restart  | 
10. 取消注册Runner
1  | # 查看token  |