gitlab-runner安装与配置

1. 安装前准备工作

1.1. 配置yum源

网上大部分教程是介绍如何安装gitlab-ci-multi-runner如何安装,我也按这些教程中的一种安装了,最终发现,不能和最新的gitlab兼容,网上也很少有文章介绍gitlab-ci-multi-runner和gitlab-runner的区别, 实际上gitlab-ci-multi-runner是一个被废弃了的项目, 最新版本只到9.5.1, 而gitlab-runner已经到14.4.0了,在其gitliab仓库上已经说明 Project ‘gitlab-org/gitlab-ci-multi-runner’ was moved to ‘gitlab-org/gitlab-runner’. Please update any links and bookmarks that may still have the old path.
关于gitlab-runner与gitlab的兼容性原则,gitlab和gitlab-runner在主版本和小版本(major.minor)保持同步,具有相同主版本和小版本号的gitlab和gitlab-runner兼容性最好, 较老的runner可能可以兼容比較新的gitlab,反之亦然,但是不能完全保证.详情请参考官网关于兼容性原文

创建文件/etc/yum.repos.d/gitlab_gitlab-ee.repo,内容如下

1
2
3
4
5
[gitlab_gitlab-ee]
name=Gitlab EE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el$releasever/
gpgcheck=0
enabled=1

说明上面使用的是清华镜像,如果访问外网速度够快,可以使用gitlab官方镜像下载,配置方法如下

1
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

更新yum cache以便获得最新版本的gitlab-runner

1
yum makecache fast

查看可安装版本

1
yum list gitlab-runner --showduplicates | sort -r

截至目前06/Nov/2021,最新的版本是14.4.0-1

2. 安装runner

1
sudo yum install -y gitlab-runner

说明:
运行此命令, 背后到底做了些什么?

  1. 安装了gitlab-runner必要的二进制文件, 配置文件
  2. 创建了gitlab-runner用户
  3. 将gitlab-runner 注册为服务并设置为开机启动

3. 配置runner

3.1. 注册一个shared runner

注册shared runner之前要启动gitlab-runner, 如果没有启动, 可用使用这条命令启动gitlab-runner

1
systemctl start gitlab-runner

向GitLab-CI注册一个Runner需要两样东西:GitLab-CI的url和注册token。
其中,token是为了确定你这个Runner是所有工程都能够使用的Shared Runner还是具体某一个工程才能使用的Specific Runner。
如果要注册Shared Runner,你需要到管理界面的Runners页面里面去找注册token.
打开gitlab页面menue > admin > CICD > runner, 在Setup shared runner一节可以找到相应的url和token

注册完成之后,在页面menue > admin > runner就会多出一条Runner记录

1
gitlab-runner register
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$gitlab-runner register
Runtime platform arch=amd64 os=linux pid=29902 revision=4b9e985a version=14.4.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://your_gitlab_domain
Enter the registration token:
your_gitlab_or_project_cicd_token
Enter a description for the runner:
[i-hrf33t1e]: runner_on_dev_server
Enter tags for the runner (comma-separated):
centos7, shell
Registering runner... succeeded runner=zSpe6VZi
Enter an executor: docker-ssh, parallels, shell, virtualbox, docker+machine, custom, docker, ssh, docker-ssh+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

4. 测试Runner

在git库项目主目录,中添加.gitlab-ci.yml
使用以下配置创建一个最简单的pipeline

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
stages:
- test
- build
- deploy

test:
stage: test
script: echo "Running tests"

build:
stage: build
script: echo "Building the app"

deploy_staging:
stage: deploy
script:
- echo "Deploy to staging server"
environment:
name: staging
url: https://staging.example.com

提交代码,到gitlab pipeline界面查看流水线是否创建成功.

5. 常用配置

/etc/gitlab-runner/config.toml

配置默认在 /etc/gitlab-runner/config.toml 下,配置文件更改时不需要重启服务,每隔三秒GitLab Runner 会检查配置修改,并重新加载。

配置项描述
concurrent限制可以同时运行的作业数量
log_level日志级别
log_format日志格式
check_interval检查新作业的间隔长度,默认为3秒
sentry_dsn启用Sentry错误跟踪
listen_addresshttp服务监听地址

6. 常用命令

6.1. 服务管理

1
2
3
4
5
6
7
8
9

gitlab-runner start #该命令启动GitLab Runner服务。

gitlab-runner stop #该命令停止GitLab Runner服务。

gitlab-runner restart #该命令将停止,然后启动GitLab Runner服务。

gitlab-runner status #此命令显示GitLab Runner服务的状态。当服务正在运行时,退出代码为零;而当服务未运行时,退出代码为非零。

7. 注销gitlab-runner

很多安装文档, 只告诉如何安装, 很少讲到如何注销和卸载.
当安装过程中遇到问题, 或使用过程中遇到问题, 可以使用大招卸载,重新安装来解决问题, 所以这里我列出了注销gitlab-runner和卸载gitlab-runner的详细说明, 以备不时之需.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#  取消注册所有runner
gitlab-runner unregister --all-runners

# 要注销特定的 runner, 首先通过gitlab-runner list获取注册者的详细信息
gitlab-runner list

# 再根据名字或url注销
# 按名字
gitlab-runner unregister --name hj_project

# 根据url加令牌
gitlab-runner unregister --url http://gitlab.example.com --token tok3n

# runner健康检查
gitlab-runner health-check

8. 卸载gitlab-runner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
!/bin/bash
# 卸载gitlab-runner

# 停止服务
gitlab-runner stop

# 取消随机启动
systemctl disable gitlab-runner

# 卸载服务
gitlab-runner uninstall

# 清理文件
rm -rf /etc/gitlab-runner
rm -rf /usr/local/bin/gitlab-runner
rm -rf /usr/bin/gitlab-runner
rm -rf /etc/sudoers.d/gitlab-runner

# 删除用户
userdel -r gitlab-runner

9. 关联阅读

gitlab安装升级及迁移

使用gitlab issue board的四种方式

GitLab集成PlantUML

gitlab-runner安装与配置

macOS上安装gitlab-runner安装与配置

fedora上安装gitlab-runner安装与配置

ubuntu上安装gitlab-runner安装与配置

windows上安装gitlab-runner

gitlab CICD基础

10. 问题排查

  1. This job does not have a trace job页面写作这个段信息
    经过分析,目前我遇到的情况是由于gitlab和gitlab runner版本不兼容, gitlab 14.4.0 ,而gitlab runner或gitlab-ci-multi-runner是9.5.1.
    解决办法,卸载gitlab-ci-multi-runner, 安装gitlab-runner 14.4.0保持和gitlab 版本一致.

  2. expected shallow list

    1
    2
    3
    Reinitialized existing Git repository in /home/gitlab-runner/builds/zBFPsthA/0/root/xxx-project/.git/
    fatal: git fetch-pack: expected shallow list
    fatal: The remote end hung up unexpectedly

一开始使用的自带git版本是1.8.3.1的,就是版本太低的问题,不支持最新的API, 可用参考我的博客升级git

  1. Run untagged jobs
    新注册的gitlab runner 默认是不pick untagged jobs 要将其打开才能pick untagged jobs

11. 参考文档

GitLab Runner的安装与使用
gitlab+gitlab-runner实现前端项目自动化构建部署
gitlab-runner常用命令