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

如何在Travis中用单个.travis.yml针对不同MySQL后端运行测试?

用单个.travis.yml针对多版本MySQL运行测试的方案

嘿,这事儿我门儿清!要在Travis里用同一个.travis.yml文件针对不同MySQL版本跑测试,核心就是用**构建矩阵(build matrix)**的include语法,把每个MySQL版本对应的配置单独列出来就行。下面给你一套完整的可落地方案:

完整配置示例

language: php
php:
  - 7.2
  - 7.4
  - 8.0

# 构建矩阵:为每个MySQL版本单独配置测试任务
matrix:
  include:
    # 针对MySQL 5.5的测试任务
    - php: 7.2
      env: DB=mysql55
      before_install:
        - sudo service mysql stop
        - sudo apt-get remove --purge mysql-server mysql-client mysql-common
        - sudo apt-get autoremove -y
        - sudo apt-get autoclean
        - sudo rm -rf /var/lib/mysql
        - sudo apt-get install -y mysql-server-5.5 mysql-client-5.5
        - sudo service mysql start

    # 针对MySQL 5.6的测试任务
    - php: 7.4
      env: DB=mysql56
      before_install:
        - sudo service mysql stop
        - sudo apt-get remove --purge mysql-server mysql-client mysql-common
        - sudo apt-get autoremove -y
        - sudo apt-get autoclean
        - sudo rm -rf /var/lib/mysql
        - sudo apt-get install -y mysql-server-5.6 mysql-client-5.6
        - sudo service mysql start

    # 针对MySQL 5.7的测试任务
    - php: 8.0
      env: DB=mysql57
      before_install:
        - sudo service mysql stop
        - sudo apt-get remove --purge mysql-server mysql-client mysql-common
        - sudo apt-get autoremove -y
        - sudo apt-get autoclean
        - sudo rm -rf /var/lib/mysql
        - sudo apt-get install -y mysql-server-5.7 mysql-client-5.7
        - sudo service mysql start
        # 5.7默认认证插件不兼容旧PHP,需切换为mysql_native_password
        - mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; FLUSH PRIVILEGES;"

    # 针对MySQL 8.0的测试任务
    - php: 8.0
      env: DB=mysql80
      before_install:
        - sudo service mysql stop
        - sudo apt-get remove --purge mysql-server mysql-client mysql-common
        - sudo apt-get autoremove -y
        - sudo apt-get autoclean
        - sudo rm -rf /var/lib/mysql
        # 8.0需要先添加官方源才能安装
        - sudo wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
        - sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
        - sudo apt-get update
        - sudo apt-get install -y mysql-server mysql-client
        - sudo service mysql start
        # 8.0同样需要切换认证插件适配PHP
        - mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; FLUSH PRIVILEGES;"

# 通用的数据库初始化步骤
before_script:
  - if [ "$DB" != "" ]; then
      mysql -u root -e "CREATE DATABASE IF NOT EXISTS test_db;";
    fi

# 替换成你的实际测试命令
script:
  - phpunit

关键配置拆解

  • 构建矩阵(matrix: include):每个条目对应一个独立的测试任务,你可以根据需求搭配不同的PHP版本(比如旧版MySQL适配旧版PHP,新版MySQL适配新版PHP),灵活度拉满。
  • before_install阶段:先卸载Travis默认自带的MySQL,再安装目标版本,避免版本冲突。尤其MySQL 8.0需要先添加官方源才能正常安装。
  • 认证插件调整:MySQL 5.7及以上默认使用caching_sha2_password认证机制,很多旧版PHP的数据库扩展不支持,所以必须切换为mysql_native_password才能确保连接正常。
  • 环境变量DB:用来标记当前测试的MySQL版本,方便后续脚本根据不同版本执行差异化逻辑。

实用小技巧

  • 可以在matrix里加上fast_finish: true,这样只要矩阵中有一个测试任务失败,就立刻终止其他任务,节省CI资源和时间。
  • 如果你的测试不需要区分PHP版本,也可以让所有PHP版本都对应每个MySQL版本,只需要在include里重复配置即可。
  • 针对旧版本MySQL(比如5.5),可能需要指定Travis的Ubuntu镜像版本为dist: trusty,因为新版镜像可能不再提供旧版MySQL的安装包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:32