我在这里拉我的头发,我正在尝试运行一个 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 中不起作用。我的其他服务似乎能够获取全局变量并使用它们

最佳答案

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

我现在已经写了一个无聊的脚本来 sleep 5 并继续检查连接,阻止 CI 执行直到数据库准备好访问。

关于docker - gitlab-ci 运行 mariadb 服务未设置 MYSQL_ROOT_PASSWORD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57975047/

10-13 09:42