GitLab Runner调度设置:如何配置仅夜间接收任务?
当然可以实现!GitLab Runner完全能满足你白天让机器处理其他任务、夜间才承接CI/CD任务的需求,和Jenkins里的定时调度逻辑类似,下面给你详细说两种常用的实现思路:
实现方案
方案一:通过系统定时任务启停Runner服务
这种方法直接从Runner服务层面控制,白天停止Runner服务,让它完全不接收任务;夜间启动服务,恢复任务处理。适合希望机器白天彻底释放资源的场景。
以Linux系统为例:
- 先确认你的GitLab Runner服务名称,一般默认是
gitlab-runner,可以用systemctl status gitlab-runner验证 - 编辑系统定时任务:
crontab -e - 添加以下定时规则(根据你的实际时段调整时间,比如晚上20点启动,早上8点停止):
# 每天20:00启动GitLab Runner服务 0 20 * * * systemctl start gitlab-runner # 每天8:00停止GitLab Runner服务 0 8 * * * systemctl stop gitlab-runner - 保存退出crontab,系统会自动生效。
如果是Windows系统,可以通过「任务计划程序」创建两个定时任务,分别调用net start gitlab-runner和net stop gitlab-runner命令来实现启停。
方案二:标签+流水线规则+调度计划组合控制
这种方法更灵活,不需要停止Runner服务,而是通过规则限制只有夜间调度的流水线才能使用这台Runner,白天即使Runner运行,也不会承接非夜间的任务。
具体步骤:
- 给目标Runner添加专属标签
进入GitLab项目的「Settings」→「CI/CD」→「Runners」,找到你的机器对应的Runner,点击「Edit」,添加一个标签(比如night-only-runner),保存设置。 - 修改
.gitlab-ci.yml配置job规则
在需要夜间运行的job中,指定专属标签,并添加规则限制只有调度触发的流水线才能执行:nightly-build-job: script: - echo "开始夜间构建任务..." # 这里写你的实际任务脚本 tags: - night-only-runner rules: # 只允许调度计划触发的流水线执行该job - if: '$CI_PIPELINE_SOURCE == "schedule"' when: always # 其他触发方式(手动、push等)都不执行 - when: never - 创建夜间流水线调度计划
进入项目的「CI/CD」→「Schedules」,点击「New schedule」:- 设置调度的时间范围(比如每天20:00触发,或者设置多个时段覆盖整个夜间)
- 可以添加自定义变量(比如
NIGHTLY_RUN=true)方便后续扩展规则 - 保存调度计划,之后到点就会自动触发使用该Runner的流水线。
方案三:暂停/恢复Runner(轻量版)
如果不想完全停止服务,也可以用GitLab Runner自带的暂停/恢复命令,结合系统定时任务来控制:
# 恢复Runner接收任务(晚上20点) 0 20 * * * gitlab-runner resume <你的Runner令牌> # 暂停Runner接收任务(早上8点) 0 8 * * * gitlab-runner pause <你的Runner令牌>
Runner令牌可以在GitLab的Runner详情页找到。
这三种方案里,方案一最直接,能彻底释放机器资源;方案二更灵活,适合需要保留Runner服务但控制任务触发的场景,你可以根据自己的实际需求选择。
内容的提问来源于stack exchange,提问作者Tricky
相关产品推荐
相关产品推荐

