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
,最后填写一个默认的镜像。
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 |