GitLab CI中services服务启动顺序为并行还是按配置顺序执行?
GitLab CI services 服务启动规则说明
直接给出准确结论:GitLab CI 中定义的 services 服务为并行启动,不会按照 .gitlab-ci.yml 里的编写顺序串行依次启动。
相关注意点补充:
- GitLab Runner 处理服务启动的逻辑是同时拉取所有服务的镜像、同时启动对应的服务容器,不会等待前一个服务完全启动就绪再处理下一个服务
- 如果你的多个服务之间存在启动依赖(例如业务服务需要等数据库服务完成初始化、创建表后才能正常运行),不能依赖
services的定义顺序保证启动先后,需要通过额外的逻辑处理依赖关系,常见的可行方案有两种:- 在 job 的
script开头增加服务就绪检测逻辑,比如用nc命令检测目标服务的端口是否处于监听状态,或者调用服务的健康检查接口确认服务可用后再执行后续任务 - 给服务镜像配置内置的 HEALTHCHECK 规则,GitLab Runner 会等待所有服务的健康检查通过后再执行当前 job 的脚本内容
- 在 job 的
- 即使你只配置了单个
services服务,GitLab Runner 也不会等待该服务完全初始化完成就会开始执行 job 脚本,如果服务本身启动耗时较长,也建议主动增加等待逻辑避免出现服务未就绪导致的 job 运行报错
内容的提问来源于stack exchange,提问作者ferzik
相关产品推荐
相关产品推荐

