【DevOps工具篇】Gitlab Runner设置(使用服务器作为Runner)
@TOC
推荐超级课程:
强烈建议学习本文之前,先阅读学习此篇:
我们通过创建仓库、添加用户、克隆和推送到我们的仓库,对GitLab服务器操作得很熟练。但是,如果我们需要构建项目或运行一些测试,我们就无法做到,因为我们没有任何GitLab Runner服务。 GitLab Runner负责管理项目流水线,而GitLab服务器负责管理仓库、用户和其他配置。
使用服务器作为Runner
创建流水线
让我们继续创建一个仓库,即Build With Lal。 添加仓库后,进入该仓库,然后进入该仓库的构建设置。 在构建下,点击流水线编辑器。点击配置流水线 粘贴以下基本流水线脚本
build:
script:
- date # 打印当前日期
- cat /etc/os-release # 打印Linux的操作系统版本
提交流水线更改后,点击构建下的流水线。 您应该会看到流水线处于待处理状态,并且将永远保持待处理状态,直到有GitLab Runner来接手并处理它。
点击待处理状态按钮,然后在下一个屏幕上点击构建按钮,您应该会看到这样的消息。
这个任务无法进行,因为您没有任何可以运行
此任务的活跃运行器。转到项目CI设置
这条消息清楚地说明您没有任何活跃的运行器
。所以这里我们得到了一个提示,我们需要一些运行器来实际运行我们的流水线。
如果您点击消息中提到的CI设置
,它将重定向您到项目运行器页面,该页面看起来像这样。
更新 Docker Compose 文件
现在,在注册 GitLab Runner 之前,我们需要对我们的 docker-compose.yml
文件进行一些小的更新。在添加了 external_url
并更改了 GitLab 容器下环境变量 GITLAB_OMNIBUS_CONFIG
中的 GitLab 服务器 port
之后,文件应该看起来像这样:
version: '3.8'
services:
gitlab-server:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab-server
environment:
GITLAB_ROOT_EMAIL: "admin@example.com"
GITLAB_ROOT_PASSWORD: "Abcd@0123456789"
# 新的更改
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost:8000'
nginx['listen_port'] = 8000
ports:
- '8000:8000'
volumes:
- ./gitlab/config:/etc/gitlab
- ./gitlab/data:/var/opt/gitlab
在这里,我们添加了一个新的环境变量 GITLAB_OMNIBUS_CONFIG
。如果没有外部 URL,一些链接将重定向到一个以容器 ID 开头的无效 URL。但是,由于浏览器只知道完全限定域名或 IP,我们需要添加这个外部 URL,以便 GitLab 服务器将 http://localhost:8000
设置为到处重定向的基本 URL。
更新 docker-compose.yml
文件后,按 CTRL+C
,然后运行
docker compose up --build --force-recreate
注册 GitLab Runner
一旦 GitLab 服务器加载了新更改,点击项目运行器页面下的 新建项目运行器 按钮,然后按照如下所示填写表单。
点击 创建运行器 按钮,它将引导您进入这个屏幕。
在此阶段,您已经在 GitLab 服务器中为运行器创建了条目,但实际上运行器尚未注册,正如 步骤 1 上方的消息所说:
在注册运行器之前必须安装 GitLab Runner。
这意味着我们需要添加另一个名为 GitLab Runner 的服务,一旦我们有了 GitLab Runner 服务,我们将在 GitLab Runner 服务内部运行下面 步骤 1 中的命令,然后我们的运行器就可以运行我们的流水线了。我们将在 GitLab Runner 容器准备好后运行以下命令。
gitlab-runner register –url http://localhost:8000 –token glrt-ydjvGwY6HqXrtBwz9Myh
让我们通过添加 GitLab Runner 容器来更新我们的 docker-compose.yml
。
version: '3.8'
services:
gitlab-server:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab-server
environment:
GITLAB_ROOT_EMAIL: "admin@example.com"
GITLAB_ROOT_PASSWORD: "Abcd@0123456789"
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost:8000'
nginx['listen_port'] = 8000
ports:
- '8000:8000'
volumes:
- ./gitlab/config:/etc/gitlab
- ./gitlab/data:/var/opt/gitlab
# 添加 Gitlab Runner 容器的新变化
gitlab-runner:
image: gitlab/gitlab-runner:alpine
container_name: gitlab-runner
network_mode: 'host'
我们正在向 docker-compose.yml
添加一个新服务,用于 GitLab Runner,它将使用来自 Docker Hub 的 docker 镜像 gitlab/gitlab-runner:alpine
。我们将 GitLab Runner 容器的 network_mode
设置为 host
,这将把 GitLab Runner 容器放在宿主机的网络上,这样 GitLab 服务器可以通过 localhost
与之通信,而不是使用其容器名称(每次重新创建容器时,容器 ID 可能会更改)。
更新 docker-compose.yml
文件后,按 CTRL+C
停止正在运行的容器,然后运行
docker compose up --build --force-recreate
继续监控 Gitlab 服务器和 Runner 容器的健康状态。
一旦两者都显示健康状态,您可以回到项目的运行器页面,在这里 http://localhost:8000/root/build-with-lal/-/settings/ci_cd
下:
设置 → CI/CD → 运行器 URL 中的 build-with-lal
是我之前创建的仓库名称。
点击 新建项目运行器
,并按照我们之前遵循的步骤来生成注册 GitLab 运行器的命令,该命令将如下所示:
gitlab-runner register --url http://localhost:8000 --token glrt-ydjvGwY6HqXrtBwz9Myh
现在我们需要在我们的 GitLab 运行器容器内执行上述命令。首先,使用 docker compose 命令登录到 GitLab 运行器容器。 docker compose exec -it gitlab-runner /bin/bash 接下来运行以下命令
gitlab-runner register --url http://localhost:8000 --token glrt-ydjvGwY6HqXrtBwz9Myh
- 当询问
GitLab 实例 URL
时,除非您的 GitLab 服务器和运行器位于不同的机器上,否则按回车键保持默认。 - 输入您喜欢的运行器名称。
- 目前,我们将选择 Shell 作为流水线执行器。我们将在下一篇文章中介绍 docker 执行器。
一旦您填写完这些详细信息,您应该就完成了,运行器注册页面应该看起来像这样。
如果您切换回项目流水线,流水线应该已经运行并显示为通过,并打印出这些日志。
docker-compose.yml
中看到的,这是一个 Linux alpine 系统。
gitlab-runner:
image: gitlab/gitlab-runner:alpine # alpine OS
这个运行器是专门为特定项目设置的,但是如果您想要注册一个全局运行器,使其对所有项目可用,可以执行任何项目的流水线,您可以在这里按照相同的步骤在管理员运行器 http://localhost:8000/admin/runners 下注册一个全局运行器。 在这里,您还可以查看所有已注册的运行器及其状态,包括项目特定的运行器和全局运行器。