GitLab CI部署:Runner部署及遇到的问题

本文详细介绍了如何在Windows上部署GitLab Runner,并解决在部署过程中遇到的问题。包括GitLab的基本操作、Runner注册、配置以及针对端口非默认和多项目配置时的注意事项。此外,还提供了解决因检查间隔导致的错误的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GitLab CI部署:Runner部署及遇到的问题

如果已经对gitlab相当了解,且英文水平较好,可以直接阅读官方的runner安装文档。

安装文档:

Windows:https://docs.gitlab.com/runner/install/windows.html

Linux:https://docs.gitlab.com/runner/install/linux-manually.html

配置说明文档:

总体说明:https://docs.gitlab.com/runner/configuration/

config.toml配置:https://docs.gitlab.com/runner/configuration/advanced-configuration.html

如果对gitlab比较了解且可阅读官方英文说明的,下面的文章可以不继续看了。

1、Gitlab

这是代码管理的基础平台。一般公司都已经安装好了。如果没有,可以自己去下载安装。

2、创建群组及项目

对于Gitlab来说,是通过项目来管理代码的。群组就相当一个项目分类。项目创建好了之后,就会有独立的URL。

在个人电脑安装Git。使用Git clone命令复制代码,然后完成commit,push等操作。在这里不做详细描述。

3、找到项目独立的token

项目界面,左侧菜单,设置—CI/CD,展开“Runner”功能组,找到“手动设置specific Runner”组。

就可以看到Runner指定的URL地址,以及注册令牌(token),例:bzYnp6-39gF7zKqrcbqP

还有最重要的运行器唯一ID号,例:fLYMe3yE,最后编写yml代码时会用到。

4、部署gitlab runner

gitlab runner的window版本,是一个独立的exe文件。

在Gitlab官网可以下载:https://docs.gitlab.com/runner/install/windows.html

下载完成之后,存放在一个文件路径不包含空格、特殊符号的文件夹里。

下载的Gitlab runnber运行程序,名称为:gitlab-runner-windows-amd64.exe

名字太长了,给改短一点:gitlab-runner.exe 放在 D:\demo\GitLab-Runner (示例)目录。

4.1注册

以管理员的方式,打开Windows PowerShell。

cd D:\demo\GitLab-Runner

.\gitlab-runner.exe register

Please enter the gitlab-ci coordinator URL:

这里输入的是步骤3标记的那个地址。

Please enter the gitlab-ci token for this runner:

这里输入的是步骤3标记的token。

Please enter the gitlab-ci description for this runner:

这里输入编译器的描述信息,比如runner服务器名称等。

Please enter the gitlab-ci tags for this runner

runner标记。可以填写多个用,号分隔。非常重要。在CI\CD配置(.gitlab-ci.yml)中,需要指定这个名称。

Please enter the executor

shell

注册runner到系统服务
./gitlab-runner.exe install

使用特定账号注册系统服务
./gitlab-runner.exe install —user ENTER-YOUR-USERNAME —password ENTER-YOUR-PASSWORD

启动runner
./gitlab-runner.exe start

注册完成之后,再通过步骤3,查看token值时,会发现多了一个已运行的运行器。这个运行器的描述里有步骤4输入的runner服务器名称,runner标记等。

一次注册过程的日志如下:

D:\GitLab_CI>.\gitlab-runner.exe register
Runtime platform                                    arch=386 os=windows pid=12744 revision=943fc252 version=13.7.0
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.201:6666/   ## URL地址
Enter the registration token:
bzYnp6-39gF7zKqrcbqP   ## 项目对应的 token 标记
Enter a description for the runner:
[CISERVER]: runner_on_ci_server  ## runner 描述,随意填,有区分就行
Enter tags for the runner (comma-separated):
tag_check,tag_build,tag_test,tag_deploy   ## .gitlab-ci.yml 中定义的几个过程tag
Registering runner... succeeded                     runner=YyTs5mar
Enter an executor: shell, ssh, virtualbox, docker+machine, docker-ssh+machine, custom, docker, parallels, docker-windows, docker-ssh, kubernetes:
shell  ## 配置在cmd中运行
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

D:\GitLab_CI>

Q&A

1、因git仓库使用6666的端口而非gitlab的默认端口,因此需要在[config.toml]文件中设置urlclone_url,具体示例如下:

concurrent = 1
check_interval = 0

[session_server]
session_timeout = 1800

[[runners]]
name = "runner_on_ci_server"
url = "http://192.168.1.201:6666/"
clone_url = "http://192.168.1.201:6666/"
token = "bzYnp6-39gF7zKqrcbqP"
executor = "shell"
shell = "powershell"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]

2、在同一CI配置了多个项目的CI流程后(即config.toml文件中存在多个runners任务),GitLab 的CI连续运行时,可能会出现fatal: unable to write new index file错误

报错信息如下:

Running with gitlab-runner 14.1.0 (8925d9a0)
  on runner_on_ci_server_for_proj1 AABBCC
Preparing the "shell" executor
Using Shell executor...
Preparing environment
Running on CISERVER...
Getting source from Git repository
Fetching changes...
Reinitialized existing Git repository in D:/GitLab_CI/builds/AABBCC/0/test/testproj/.git/
Checking out 1cf44cd5 as master...
fatal: unable to write new index file
ERROR: Job failed: exit status 1

此问题发生的实际原因暂时未知,修改GitLab-CI-runner的配置config.toml中的任务检查间隔check_interval值可缓解此问题。

check_interval值的详细配置描述,可查看官方文档 https://docs.gitlab.com/runner/configuration/advanced-configuration.html

此处简要说明如下:

Runner间隔多久去GitLab上检查是否有job

config.toml文件的check_interval字段会决定这个时间间隔,它的默认值是3秒(注意当你把它设为0时依然采用的是默认值3秒,而不是0秒)。要解释它的意义,首先我们先来定义worker,在config.toml文件中定义了很多runner,它们可能executor类型不同,可能注册地址不同,但都是由GitLab Runner这个服务来管理的,为了与GitLab Runner区分开,我们将config.toml文件中定义的runner称为worker。对于不同的worker,worker之间(如worker A ---> worker B)的间隔为check_interval / worker_nums,但是对于worker A本身来说它下次去检查是否有job的时间间隔仍为check_interval。我们再举个简单例子:config.toml定义了3个worker—— worker A, worker B 和 worker C,check_interval采用默认值为3秒,第0秒时worker A会去检查是否有属于自己的job,第1秒时worker B会去检查,第2秒时worker C去检查,第3秒时worker A再检查……这个过程中worker A到worker B的间隔为3 / 3 = 1秒,而对于worker A下次检查job时的时间间隔为check_interval,即3秒。

修改后的config.toml文件如下

concurrent = 1
check_interval = 6

[session_server]
  session_timeout = 1800

[[runners]]
  name = "runner_on_ci_server_for_proj1"
  url = "http://192.168.1.201:6666/"
  token = "bzYnp6-39gF7zKqrcbqP"
  executor = "shell"
  clone_url = "http://192.168.1.201:6666/"
  shell = "powershell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]

[[runners]]
  name = "runner_on_ci_server_for_proj2"
  url = "http://192.168.1.201:6666/"
  token = "bfdJDF73F-3FDERKIRTP"
  executor = "shell"
  clone_url = "http://192.168.1.201:6666/"
  shell = "powershell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值