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

