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
相关产品推荐
相关产品推荐

