You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

自托管GitLab Runner虚拟机中GitLab父子管道运行故障排查与解决方案问询

解决GitLab父子管道Runner匹配及多Runner部署问题

一、子管道Job卡住的核心原因及修复方案

你的子管道Job一直处于等待状态,核心问题是Runner标签不匹配

  • 你注册项目Runner时指定了--tag-list "my_devops, MY_TOKEN",这意味着这个Runner只会承接带有对应标签的Job;
  • 但你的子管道所有Job(比如job-np-queues)都没有配置tags字段,导致Runner无法匹配这些任务,最终Job卡住。

两种修复方式任选其一:

  1. 给子管道Job添加匹配标签
    在子管道的每个Job中补充tags配置,和Runner的标签对应上:

    job-np-queues:
      script:
        - echo "DO THINGS"
      timeout: 40m
      tags:
        - my_devops  # 和你的Runner标签一致
    

    后续所有子管道Job都需要添加相同标签(或至少包含Runner的其中一个标签)。

  2. 允许Runner处理无标签Job
    如果不想给每个Job加标签,可以修改Runner的配置:

    • 进入项目的Settings > CI/CD > Runners页面;
    • 找到你的项目Runner,点击右侧编辑按钮;
    • 勾选Run untagged jobs选项并保存。

二、组Runner未显示在项目可用列表的排查点

组Runner不出现,通常是以下几个配置问题导致:

  1. 项目未启用共享Runner
    进入项目Settings > CI/CD > Runners,确认Enable shared runners for this project选项已勾选(这个开关控制是否允许组级共享Runner在当前项目运行)。

  2. 组Runner的标签或状态限制

    • 如果组Runner设置了专属标签,而项目Job没有对应标签,它不会显示在可用列表(或显示但无法承接任务);
    • 检查组Runner的状态是否为在线,离线的Runner不会出现在可用列表中。
  3. Runner注册范围错误
    确认组Runner是注册到当前项目所属的群组,注册时选错群组会导致Runner无法同步到项目。

三、同一虚拟机部署多个Shell Runner的方法

完全可以在同一台虚拟机部署多个GitLab Runner,操作步骤如下:

  1. 重复执行注册命令
    使用不同的描述和标签(也可相同,按需调整)再次注册Runner,示例命令:

    gitlab-runner register \
     --non-interactive \
     --url "https://gitlab.com/" \
     --registration-token "YOUR_GROUP_OR_PROJECT_TOKEN" \
     --description "devops secondary runner" \
     --tag-list "my_devops_secondary, backup" \
     --executor "shell"
    

    注意每个Runner要使用对应的注册令牌(项目令牌或组令牌)。

  2. 管理多个Runner实例

    • 查看所有已注册的Runner:gitlab-runner list
    • 启动所有Runner:gitlab-runner start(GitLab Runner会自动管理多个实例)
    • 单独启停某个Runner:gitlab-runner start [RUNNER_NAME]
  3. 注意事项

    • 由于都是Shell执行器,多个Runner会共享虚拟机资源,可在/etc/gitlab-runner/config.toml中修改concurrent值调整并发数(默认是1,可根据CPU核心数适当增加);
    • 不同Runner设置不同标签,能方便在CI Job中指定特定Runner执行任务。

内容的提问来源于stack exchange,提问作者TPPZ

火山引擎 最新活动