如何实现GitLab Runner并行运行且单Runner同一时间仅执行一个任务
解决GitLab Runner专属仓库单任务并发配置问题
核心配置方案
要实现每个专属Runner同一时间仅执行1个任务、不同仓库任务可并行的需求,需结合全局并发限制和单个Runner的任务限制,同时确保标签配置准确:
全局并发数设置
修改Runner节点的config.toml文件顶部的concurrent值为6(对应你的6个Runner数量),这会允许该节点最多同时执行6个任务,刚好满足每个Runner各跑1个的并行需求:concurrent = 6 check_interval = 0 [session_server] session_timeout = 1800单个Runner的任务限制
在每个Runner的[[runners]]配置块中添加limit = 1,强制该Runner同一时间只能处理1个任务,同时给每个Runner设置唯一的专属标签,示例:[[runners]] name = "Repo1专属Runner" url = "https://你的GitLab实例地址/" token = "你的Runner令牌" executor = "shell" # 替换为你实际使用的执行器(如docker) limit = 1 # 关键:限制该Runner同时仅运行1个任务 [runners.tags] - "repo1-exclusive"对6个Runner重复此配置,每个Runner使用不同的标签名(如
repo2-exclusive、repo3-exclusive等)。仓库CI/CD任务绑定
在每个仓库的.gitlab-ci.yml中,指定任务仅使用对应标签的Runner,确保任务不会分配到其他Runner:build: tags: - repo1-exclusive script: - # 你的任务脚本
常见问题排查
如果之前的配置组合未生效,大概率是以下原因:
- 全局
concurrent值设置过小(比如设为1),导致整个节点只能同时跑1个任务,所有Runner都要排队; - 单个Runner未配置
limit = 1,导致该Runner会同时处理多个同仓库的任务; - 标签配置重复或未正确绑定,任务被分配到了非专属Runner上。
验证方法
重启GitLab Runner服务后,同时给不同仓库触发多个任务:
- 同一个仓库的多个任务应该处于排队状态,前一个完成后才会启动下一个;
- 不同仓库的任务会同时执行,互不等待。
内容的提问来源于stack exchange,提问作者Daniel Fradley
相关产品推荐
相关产品推荐

