如何为共享硬件资源的GitLab CI作业配置QoS机制
问题背景
现有1台专用测试硬件,归属不同独立项目的CI作业运行时均需调用该硬件。受硬件本身特性限制,其输入参数配置无法在不同应用间平滑切换,作业间复用时必须执行硬件重置操作,不支持分时共享。
待确认问题:GitLab是否支持在作业代理与YAML配置文件中,为争抢同类资源(本场景为物理硬件)的作业配置服务质量(QoS)规则?目前除作业阶段检测能力外,跨独立项目的作业资源争抢检测方案实现难度较高。
可行落地方案
说明:下述方案并非最优实现——理想状态下应支持直接针对硬件设备配置QoS规则,当前阶段可通过硬件与专用Runner绑定的方式规避资源调用冲突。
核心实现逻辑是将物理硬件设备直接透传至指定的专属GitLab Runner,所有需要调用该硬件的流水线作业全部调度到这台专属Runner上运行,从调度层避免多作业同时争抢硬件的问题,具体配置步骤如下:
- 修改专属Runner的配置文件,开启硬件透传,Docker执行器的配置示例如下:
[[runners]] executor = "docker" [runners.docker] privileged = true devices = ["/dev/path/to/device"]
- 将该专属Runner的全局并发参数
concurrent设置为1,保证同一时间Runner仅运行1个作业,从执行层彻底杜绝硬件被多作业同时占用的可能。 - 在所有需要调用该硬件的CI作业的YAML配置中,通过
tags字段匹配专属Runner的标签,确保相关作业只会被调度到该专属Runner上执行,不会被分发到其他未挂载硬件的Runner节点。
内容的提问来源于stack exchange,提问作者NationWidePants
相关产品推荐
相关产品推荐

