You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

额外优化建议

  1. 调整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
    
  2. 检查仓库文件:确认没有.env.test.local被提交到仓库,否则该文件中的DATABASE_URL会覆盖GitLab CI中设置的环境变量。

验证修改

提交修改后的.gitlab-ci.yml,重新触发流水线,数据库连接错误应该会消失,PHPUnit测试能正常访问测试数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:27:24