GitLab Runner 是 GitLab CI/CD 中的一个关键组件,负责执行 .gitlab-ci.yml
文件中定义的作业。以下将从多个方面详细介绍 GitLab Runner:
基本概念
GitLab Runner 本质上是一个独立的应用程序,它会与 GitLab 服务器建立连接,接收来自 GitLab 的作业请求,并在本地环境中执行这些作业。当代码仓库中有新的提交触发了 CI/CD Pipeline 时,GitLab 会将作业分配给合适的 Runner 来执行。
类型
- 共享 Runner:由 GitLab 官方或 GitLab 实例管理员提供的 Runner,可供多个项目使用。使用共享 Runner 无需自行维护基础设施,适合小型项目或资源有限的团队。
- 特定项目 Runner:由项目管理员或开发者自行配置和管理的 Runner,只能用于特定的项目。特定项目 Runner 可以根据项目的特殊需求进行定制,例如使用特定的操作系统、安装特定的软件依赖等。
- 群组 Runner:可用于 GitLab 群组下的所有项目,介于共享 Runner 和特定项目 Runner 之间,方便群组内的多个项目共享资源。
安装和注册
安装
GitLab Runner 支持多种操作系统,以下以在 Ubuntu 系统上安装为例:
# 添加 GitLab Runner 的官方仓库
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
# 安装 GitLab Runner
sudo apt-get install gitlab-runner
注册
注册 Runner 时需要提供 GitLab 实例的 URL 和注册令牌,注册令牌可以在 GitLab 项目的 “设置” - “CI/CD” - “Runners” 页面中找到。
sudo gitlab-runner register
注册过程中需要依次输入 GitLab 实例的 URL、注册令牌、Runner 的描述、标签(用于指定 Runner 可以执行的作业)、执行器(如 Docker、Shell 等)等信息。
执行器
执行器决定了 Runner 执行作业的环境和方式,常见的执行器有:
- Shell 执行器:直接在 Runner 所在的主机上执行作业脚本,适用于简单的脚本执行和本地环境测试。
- Docker 执行器:使用 Docker 容器来执行作业,可以提供隔离的运行环境,确保作业的独立性和可重复性。例如,在
.gitlab-ci.yml
中可以指定使用的 Docker 镜像:
job:
image: node:14
script:
- npm install
- npm test
- Kubernetes 执行器:在 Kubernetes 集群中动态创建 Pod 来执行作业,适合大规模的分布式应用和复杂的 CI/CD 场景。
配置管理
可以通过编辑 /etc/gitlab-runner/config.toml
文件来对 Runner 进行详细的配置,例如设置并发执行的作业数量、修改执行器的参数等。以下是一个简单的配置示例:
concurrent = 2 # 允许同时执行 2 个作业
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "my-runner"
url = "https://gitlab.com"
token = "your-token"
executor = "docker"
[runners.docker]
image = "alpine:latest"
privileged = false
监控和维护
- 状态监控:可以在 GitLab 的项目页面或 Runner 管理页面查看 Runner 的状态,如是否在线、是否忙碌等。
- 日志查看:Runner 的执行日志可以帮助开发者定位作业执行过程中出现的问题。可以通过查看
/var/log/gitlab-runner.log
文件或在 GitLab 界面中查看作业的详细日志。 - 更新维护:定期更新 GitLab Runner 到最新版本,以获取新功能和安全补丁。更新命令通常为:
sudo apt-get update sudo apt-get install --only-upgrade gitlab-runner
优势
- 灵活性:支持多种执行器和配置选项,可以根据不同项目的需求进行定制。
- 扩展性:可以根据项目的规模和负载情况添加或删除 Runner,实现弹性扩展。
- 集成性:与 GitLab 紧密集成,能够无缝接收和执行来自 GitLab 的作业请求。