首页 > 解决方案 > gitlab-ci 运行 mariadb 服务未设置 MYSQL_ROOT_PASSWORD

问题描述

我在这里拉头发,我正在尝试运行 mariadb 服务,作为我对 rails 应用程序的 gitlab-ci 测试的一部分。但是,当测试运行时,mariadb 不尊重 gitlab-ci 中的环境变量.. 例如..

services:
- name: mariadb

variables:
  # Configure mysql service (https://hub.docker.com/_/mysql/)
  MYSQL_DATABASE: hello_world_test
  MYSQL_ROOT_PASSWORD: mysql

connect:
  image: mariadb
  script:
  - echo "SELECT 'OK';" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb "$MYSQL_DATABASE"

我希望 mariadb 以 root 密码启动,但是我得到的只是没有设置 root 密码的警告,显然我的 CI 失败了。

如果我将 mariadb 更改为 mysql 一切正常。如果我手动启动 mariab

docker run -e MYSQL_ROOT_PASSWORD=mysql mariadb 一切都很好。与使用 docker-compose 一样,为什么它在 Gitlab-CI 中不起作用。我的其他服务似乎能够获取全局变量并使用它们

标签: dockergitlabmariadbgitlab-ci

解决方案


更多的挖掘..我发现mariadb需要一些时间来启动并在它准备好接受连接之前打开一个TCP端口,这似乎是gitlab的一个指标,它已经准备好等等......但是mariadb不是尚未准备好,因此连接失败。

我现在编写了一个无聊的脚本来休眠 5 并继续检查连接,暂停 CI 执行,直到数据库准备好访问。


推荐阅读