You need to enable JavaScript to run this app. GitLab CI配置MariaDB测试服务启动失败问题
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI配置MariaDB测试服务启动失败问题

问题根因定位

查看服务日志中的关键报错可以直接定位故障点:

mysqld: Character set 'utf8mb4 --collation-server=utf8mb4_unicode_ci' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

MariaDB的mysqld进程收到的字符集参数是一整串未拆分的长字符串,被错误识别为--character-set-server的参数值,因此触发了启动校验失败。

配置错误说明

当前MariaDB服务配置中,command字段的写法不符合GitLab CI的参数透传规则:
原配置将两个独立的启动参数拼接为单个数组元素:

command: [ "--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci" ]

GitLab CI对服务的command配置会直接将数组元素逐一作为独立参数传递给容器入口程序,整个过程没有经过Shell的自动拆分逻辑。也就是说这种写法只会给mysqld传1个带空格的长参数,而非两个独立的启动项。
这也是本地运行正常、CI环境启动失败的核心差异:本地使用docker run传参时,Shell会自动将空格分隔的内容拆分为独立参数,和GitLab CI的参数透传逻辑完全不同。

修复方案

将两个启动参数拆分为数组中的独立元素即可,修改后的完整参考配置:

variables:
  MYSQL_DATABASE: backend
  MYSQL_USER: admin
  MYSQL_PASSWORD: admin

test:
  stage: test
  image: maven:3.6.3-openjdk-16
  services:
    - name: mariadb
      alias: db
      command:
        - "--character-set-server=utf8mb4"
        - "--collation-server=utf8mb4_unicode_ci"
配置注意事项
  • 在GitLab CI的服务command配置中,禁止用空格在数组元素内拼接多个参数,所有需要传给入口程序的独立参数必须单独占一个数组项
  • MariaDB官方镜像会自动识别全局变量中定义的MYSQL_DATABASE/MYSQL_USER/MYSQL_PASSWORD值完成数据库初始化,无需额外传入对应的启动参数

内容的提问来源于stack exchange,提问作者Hantsy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 17:45:07