如何配置GitLab-CI:主Runner忙碌/不可用时自动使用共享Runner?
GitLab-CI实现Runner优先级调度方案
你遇到的问题是因为GitLab CI的tags数组默认是逻辑与关系,要求Runner必须同时拥有所有指定标签才会执行作业,所以你的配置找不到符合条件的Runner,导致作业无法运行。完全可以实现主Runner优先、忙时/不可用时自动切换到共享Runner的需求,以下是两种可行方案:
方案一:使用标签OR表达式(GitLab 13.10+支持)
直接用表达式指定标签的逻辑或关系,同时给主Runner设置更高优先级确保优先调度:
stages: - build build-job: stage: build # 满足其中一个标签即可匹配 tags: - "first-runner" || "shared-runner" script: - sleep 150
额外配置:设置Runner优先级
在GitLab项目的「Settings > CI/CD > Runners」中,找到你的主Runner,编辑并设置更高的优先级数值(默认值为0,数值越大优先级越高)。这样当两个Runner都空闲时,会优先分配主Runner;当主Runner忙碌或不可用时,作业会自动分配到共享Runner。
方案二:拆分作业实现回退(兼容旧版本GitLab)
如果你的GitLab版本低于13.10,不支持标签表达式,可以拆分两个作业,通过依赖逻辑实现回退:
stages: - build - fallback-build # 主作业:优先使用主Runner build-job-primary: stage: build tags: - first-runner script: - sleep 150 # 允许主作业失败,不中断流水线 allow_failure: true # 回退作业:仅当主作业失败时触发(主Runner忙/不可用) build-job-fallback: stage: fallback-build tags: - shared-runner script: - sleep 150 # 依赖主作业,但不等待 artifacts needs: - job: build-job-primary artifacts: false optional: true # 仅在主作业失败时执行 only: - failed: build-job-primary
内容的提问来源于stack exchange,提问作者Azazel
相关产品推荐
相关产品推荐

