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

GitLab流水线中WordPress插件测试的MySQL服务错误排查

WordPress插件GitLab流水线单元测试故障排查与解决

一、解决mysql: command not found/mysqladmin: command not found错误

composer:2镜像默认不包含MySQL客户端工具,需在任务执行容器中手动安装,根据镜像基础系统选择对应命令:

  • 基于Alpine的composer镜像(如composer:2-alpine):
    before_script:
      - apk add --no-cache mysql-client
    
  • 基于Debian的composer镜像(如composer:2):
    before_script:
      - apt-get update && apt-get install -y mysql-client
    

二、解决ERROR 2005 (HY000): Unknown server host 'database' (-2)错误

该错误多因MySQL服务未就绪或容器网络连通性问题,按以下步骤修复:

1. 规范MySQL服务容器配置

在.gitlab-ci.yml的services段中,明确设置环境变量与启动参数,确保服务能正常初始化:

services:
  - name: mysql:8
    alias: database
    command: ["--default-authentication-plugin=mysql_native_password"]
    variables:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress_test
      MYSQL_USER: wp_test
      MYSQL_PASSWORD: wp_test_pass

2. 添加服务就绪等待逻辑

GitLab CI启动服务容器后,任务容器会立即执行脚本,但MySQL需几秒完成启动,在before_script中加入等待逻辑:

before_script:
  # 安装mysql-client(根据镜像系统选择对应命令)
  - apt-get update && apt-get install -y mysql-client
  # 循环等待MySQL服务就绪
  - |
    until mysql -h database -u root -p"$MYSQL_ROOT_PASSWORD" -e "SELECT 1"; do
      echo "等待MySQL服务启动..."
      sleep 2
    done

3. 验证容器网络连通性

若等待后仍无法连接,可在before_script中添加ping命令测试主机解析:

- ping -c 3 database

如果ping不通,检查GitLab Runner配置,确保启用Docker bridge网络模式(默认配置,保证任务容器与服务容器在同一网络)。

完整测试任务配置示例

stages:
  - test

unit-test:
  stage: test
  image: composer:2
  services:
    - name: mysql:8
      alias: database
      command: ["--default-authentication-plugin=mysql_native_password"]
      variables:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: wordpress_test
        MYSQL_USER: wp_test
        MYSQL_PASSWORD: wp_test_pass
  before_script:
    - apt-get update && apt-get install -y mysql-client
    - |
      until mysql -h database -u root -p"$MYSQL_ROOT_PASSWORD" -e "SELECT 1"; do
        echo "等待MySQL服务启动..."
        sleep 2
      done
    - composer install
    - curl -O https://raw.githubusercontent.com/wp-cli/wp-cli/master/utils/wp-cli-tests/install-wp-tests.sh
    - bash install-wp-tests.sh wordpress_test wp_test wp_test_pass database latest true
  script:
    - phpunit

额外注意事项

  • 确保install-wp-tests.sh中的数据库主机参数为database(与服务容器别名一致)
  • MySQL 8.0必须设置--default-authentication-plugin=mysql_native_password,否则旧版客户端无法完成认证
  • 本地Docker环境正常是因为手动控制了服务启动顺序,GitLab CI需显式添加等待逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:45:23