CI/CD流水线中PHPUnit无法连接测试数据库问题求助
解决GitLab CI/CD中PHPUnit无法连接测试数据库的问题
问题根源
本地DDEV环境中数据库服务容器名为db,所以.env.test里的DATABASE_URL用db作为主机名能正常解析,但在GitLab CI配置中,你将mariadb服务的别名设为了mysql,却依然在DATABASE_URL里使用db作为主机地址,导致DNS无法解析该主机名,抛出getaddrinfo for db failed错误。
解决方案
方案1:修正GitLab CI的服务别名
把mariadb服务的别名改成db,和本地环境保持一致,这样DATABASE_URL无需修改:
services: - name: mariadb:10.3.11 alias: db # 从mysql改为db
方案2:修正GitLab CI的DATABASE_URL主机地址
如果不想改动服务别名,就把DATABASE_URL里的主机名从db改成mysql:
variables: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: testdb MYSQL_USER: root MYSQL_PASSWORD: root DATABASE_URL: mysql://root:root@mysql:3306/testdb?serverVersion=mariadb-10.3.11&charset=utf8mb4
额外优化建议
- 调整before_script执行顺序:先清理缓存再执行数据库操作,避免缓存中旧的数据库配置干扰,同时添加无交互参数跳过确认提示:
before_script: - php bin/console cache:clear --env=test - php bin/console doctrine:database:drop --force --if-exists --env=test --connection=default - php bin/console doctrine:database:create --env=test - php bin/console doctrine:migrations:migrate --env=test --no-interaction - php bin/console doctrine:fixtures:load --no-interaction - 检查仓库文件:确认没有
.env.test.local被提交到仓库,否则该文件中的DATABASE_URL会覆盖GitLab CI中设置的环境变量。
验证修改
提交修改后的.gitlab-ci.yml,重新触发流水线,数据库连接错误应该会消失,PHPUnit测试能正常访问测试数据库。
内容的提问来源于stack exchange,提问作者balrcoding
相关产品推荐
相关产品推荐

