如何运行多个GitLab-CI-Runner?

30

这是一个非常基础的问题,但我没有找到(好的)文档;下面是答案:

  • 我可以在同一台服务器上设置/运行多个runner吗?
  • “runner”是什么意思?它是(全能式)安装还是我使用例如/opt/gitlab-runner/bin/runner 启动的进程?
  • 关于/opt/gitlab-runner/bin/runner:启动多个这样的进程有意义吗? (它们不会单独显示在gitlab-ci网络视图的“Runners”选项卡下)

谢谢。


3
如果您正在使用Docker,则无需在服务器上运行多个Runner。只需在配置文件中提高“concurrent”设置即可。 - Matthew
6个回答

12

如果有其他人在Windows上尝试运行多个GitLab Runner:

  • 下载/复制gitlab-runner.exe到两个不同的位置。
  • 在它们各自的文件夹中注册它们。
  • 安装它们并为-n标志提供不同的名称,例如:
gitlab-runner-windows-amd64.exe install -n dockerbuilder
  • 使用 -n 标志以相同的名称启动它们。

3
安装Windows服务时会使用提供的确切名称。为了方便在任务管理器中查看所有的gitlab-runner,可以在所有名称前加上前缀“gitlab-runner-”。 - Bernhard Döbler

8
  1. 是的,您可以设置多个Runner。请参考https://docs.gitlab.com/runner/以获取更多信息。
  2. 通常情况下,您需要在与主GitLab实例不同的计算机上设置Runner。至少这是我所做的。Omnibus GitLab指的是维护您的存储库并通过Web UI访问的主系统。Runners是独立的进程(工作人员),它们等待新提交被推送,然后执行构建操作。
  3. 一个好的实践是设置多个专门用于特定技术的Runner。例如,专门用于JAVA、NodeJS、Python、Ruby或PHP构建的Runner。如果UI中没有显示任何Runner,则它们未正确地注册到您的实例中。请参阅第1点中的文档。

3

你可以运行多个GitLab Runner实例,但从GitLab 12.2版本开始,需要注意以下重要事项: https://docs.gitlab.com/runner/faq/README.html#why-cant-i-run-more-than-one-instance-of-runner

为什么不能运行多个Runner实例?

你可以运行多个实例,但是不要共享同一个config.toml文件。

如果使用相同的配置文件运行多个Runner实例会导致意外的和难以调试的行为。在GitLab Runner 12.2版本中,每次只有一个Runner实例能够使用特定的config.toml文件。


2
首先,要明白为什么你需要多个运行器。如果你只是想让多个作业并行运行,内置的执行器将会遵循并发配置,并允许多个作业同时执行。通常情况下,你只需要一个运行器进程和一个配置文件来管理每个主机。这个进程可以同时处理多个运行器配置。
如果你想要具有不同配置的多个运行器(例如,同时拥有一个shell执行器运行器和一个docker执行器运行器),你可以在配置文件中添加多个运行器部分;只需在config.toml文件中添加另一个[[runner]]部分!如果你多次调用register命令,它会自动为你完成。每个运行器都会在GitLab界面上显示为单独的注册运行器,但你只需要一个配置文件和一个gitlab-runner进程来管理多个已注册的运行器。
例如,一个具有两个单独配置的执行器的配置,你可以使用不同的参数运行gitlab-runner register命令两次,从而得到不同的配置结果。
从一个只有全局元素或其他非运行器部分定义的配置文件开始。就像这样:
concurrent = 10
check_interval = 0
# ... etc...

[session_server]
  session_timeout = 1800

然后,使用命令行传递的配置键注册您想要的运行器(或者您可以在注册每个运行器后编辑config.toml中的配置):
# register the first runner
gitlab-runner register \
  --non-interactive \
  --url "https://${HOSTNAME}/" \
  --registration-token "${REGISTRATION_TOKEN}" \
  --executor "docker" \
  --tag-list "docker" \
  --run-untagged="true" \
  --config="/etc/gitlab-runner/config.toml"
  # ... etc

# register the second runner
gitlab-runner register \
  --non-interactive \
  --url "https://${HOSTNAME}/" \
  --registration-token "${REGISTRATION_TOKEN}" \
  --executor "shell" \
  --tag-list "shell" \
  --limit="2" \
  --config="/etc/gitlab-runner/config.toml"
  # ... etc

需要注意的是,在注册时必须提供--tag-list。注册后,只能通过GitLab UI或API进行编辑。
运行注册命令后,config.toml文件应该被编辑为包含两个[[runners]]部分。它会类似于以下内容:
concurrent = 10  # global/total concurrency
check_interval = 0
# ... etc...

[session_server]
  session_timeout = 1800

# Specify a docker executor
[[runners]]
  (...)  # specific runner config, token, etc.
  executor = "docker"
  [runners.docker]
    (...)  # docker executor configuration...


# specify a shell executor
[[runners]]
  (...)  # specific runner config, token, etc.
  executor = "shell"
  limit = 2  # concurrency limit for THIS executor

当你运行gitlab-runner start命令时,你应该在GitLab的用户界面上看到两个在线的Runner。

1
我有一个设置,需要为两个不同的作业准备一个运行程序。当您定义并发时,它会为给定机器中的所有运行程序设置并发性。
如果您有两个运行程序(具有不同的标签或设置)和concurrent=2,则表示两者可以同时运行2个作业。如果concurrent=1,则只有一个运行程序每次运行一个作业。
在此处找到解决方案:https://forum.gitlab.com/t/run-runners-in-parallel-on-the-same-server/9213/2 concurrent=2,并为每个运行程序添加limit=1,以在服务器上最多运行2个作业,并将每个运行程序限制为仅一个作业。

0
由于Mateuszl提供的链接已经不存在了,而且我作为一个相对新的用户无法发表评论,所以我在这里分享新的链接:

https://docs.gitlab.com/runner/faq/#why-cant-i-run-more-than-one-instance-of-gitlab-runner

你可以运行多个Runner,但要记住以下一点: 在GitLab Runner 12.2中,由于并发问题,只能有一个GitLab Runner实例同时使用特定的config.toml文件。与此相关的问题已经关闭,并接受了解决方案运行多个指向不同config toml文件的Runner

https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3688

https://gitlab.com/gitlab-org/gitlab-runner/-/issues/4407


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接