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

BitBucket Pipeline执行PHPUnit测试时数据库连接失败求助

解决BitBucket Pipeline中PHPUnit测试的cURL连接错误

问题核心分析

错误提示cURL error 7: Failed to connect to $DB_HOST port 80暴露两个关键问题:

  • 代码中存在未解析的环境变量$DB_HOST
  • 错误地尝试通过HTTP端口(80)访问数据库主机,而非数据库默认的3306端口

这并非数据库连接配置本身的问题,而是测试代码的HTTP请求逻辑或环境变量配置有误。

具体修复步骤

1. 修正测试代码中的HTTP请求逻辑

  • 搜索测试代码里的$DB_HOST变量,确认是否误将数据库主机地址当作Web服务器地址使用
  • 若为Drupal功能测试,确保通过Drupal测试框架提供的方法发起请求,而非直接硬编码cURL地址

2. 补充Drupal测试必需的环境变量

在BitBucket Pipeline的script阶段添加Web服务器地址变量:

export SIMPLETEST_BASE_URL='http://localhost'

3. 清理MySQL服务的冲突配置

当前definitions.services.mysql中存在变量冲突,保留必要配置即可:

definitions:
  services:
    mysql:
      image: mysql:5.7
      variables:
        MYSQL_DATABASE: pipelines
        MYSQL_USER: test_user
        MYSQL_PASSWORD: test_user_password
        MYSQL_ROOT_PASSWORD: root_user_password

移除MYSQL_ALLOW_EMPTY_PASSWORD和MYSQL_RANDOM_ROOT_PASSWORD,避免容器启动时的参数冲突

4. 简化Pipeline脚本冗余步骤

  • 移除apt-get install中的mariadb-server:已使用MySQL服务容器,本地安装会造成端口冲突
  • 移除手动创建数据库的命令mysql -h 127.0.0.1 ... CREATE DATABASE:MySQL容器启动时会自动创建MYSQL_DATABASE指定的库

5. 修正后的完整Pipeline配置

image: php:8.1

pipelines:
  default:
    - step:
        name: Build and Test
        services:
          - mysql
        caches:
          - composer
        script:
          - apt-get update && apt-get install -y default-mysql-client zip unzip libfreetype6-dev libjpeg62-turbo-dev libpng-dev zlib1g-dev
          - docker-php-ext-configure gd --with-freetype --with-jpeg
          - docker-php-ext-install -j$(nproc) gd exif pdo pdo_mysql
          - export SIMPLETEST_DB='mysql://test_user:test_user_password@127.0.0.1/pipelines'
          - export SIMPLETEST_BASE_URL='http://localhost'
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
          - composer install
          - vendor/bin/phpunit -c phpunit.xml web/modules/custom/

definitions:
  services:
    mysql:
      image: mysql:5.7
      variables:
        MYSQL_DATABASE: pipelines
        MYSQL_USER: test_user
        MYSQL_PASSWORD: test_user_password
        MYSQL_ROOT_PASSWORD: root_user_password

额外检查点

  • 确认测试使用的settings.php(或settings.test.php)未被其他配置覆盖,数据库连接参数正确
  • 若测试仍失败,可在Pipeline脚本中添加echo $DB_HOST查看变量是否被正确注入,排查环境变量传递问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:00:06