docker - 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 中不起作用。我的其他服务似乎能够获取全局变量并使用它们
解决方案
更多的挖掘..我发现mariadb需要一些时间来启动并在它准备好接受连接之前打开一个TCP端口,这似乎是gitlab的一个指标,它已经准备好等等......但是mariadb不是尚未准备好,因此连接失败。
我现在编写了一个无聊的脚本来休眠 5 并继续检查连接,暂停 CI 执行,直到数据库准备好访问。
推荐阅读
- symfony - 如何在 Symfony 4 中设置相似和不相似?
- java - Android 应用在运行时自行更改语言
- r - 如何在两个数据表之间提取具有特定列和值的行?
- javascript - Javascript中的拆分函数不适用于对象中的字符串
- javascript - 如何在 javascript 中使用 input.value
- sql - 如何使用调用 API 的 python 脚本在 Azure SQL 数据库中导入 CSV
- java - 如何使用junit对HttpClient重试逻辑进行单元测试
- python-3.x - 添加列表列表,双重分配
- c - C:返回通用寄存器
- jsf - 使用 PrimeFaces DF 打开多个对话框