如何使用一个.travis.yml文件针对不同的MySQL后端运行测试?
类似here的内容,使用matrix->include
。例如:
我目前发现的是:
后来提到
您还可以在启用了sudo的Ubuntu Trusty上安装MySQL 5.7。
但是没有提到如何使用5.6和5.7,例如。
可能的解决方法(如果没有" Travis"解决方法):
方法:创建不同的Docker设置,每个设置都有一个MySQL版本并手动测试我的脚本。但这会大大增加我的开发环境并且非常耗时。
从sources / via apt安装所需的MySQL服务器,具体取决于相关的环境变量(例如MYSQL_VERSION == 5.5)。使用某些配置来访问它。
感谢您的反馈!
答案 0 :(得分:1)
我以@ k00ni在PyMySQL initializedb.sh
script中链接为例,并将其简化为一些简单的例子,因为我的测试不需要TLS或自定义用户。这是Sqitch linux-mysql
script:
#!/bin/bash
if [ $MYSQL = 'system' ]; then
exit
fi
# Derived from https://github.com/PyMySQL/PyMySQL/blob/master/.travis/initializedb.sh
set -e
sudo service mysql stop
docker pull ${MYSQL}
RUN_MYSQL="docker run -it --name=mysqld -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306"
export MYSQL_URI=db:mysql://root@127.0.0.1/information_schema
if [ $MYSQL == 'mysql:8.0' ]; then
${RUN_MYSQL} ${MYSQL} --default-authentication-plugin=mysql_native_password
else
${RUN_MYSQL} ${MYSQL}
fi
它导出MYSQL_URI
,因此测试没有连接方法。修改以适合您自己的测试。
该脚本无需费心等待MySQL完成启动,因为Sqitch测试需要一到两分钟的时间来做很多其他工作,然后再运行连接到数据库的测试。如果您的项目需要等待MySQL启动,请将其附加到脚本末尾:
while ! docker exec mysqld mysqladmin ping --host localhost --silent &> /dev/null ; do
echo "Waiting for database connection..."
sleep 2
done
无论哪种方式,这都是`.travis.yml创建运行多个MySQL版本的构建阶段的方式:
jobs:
include:
# https://hub.docker.com/_/mysql
# https://hub.docker.com/_/mariadb
- &mysql
stage: MySQL
if: branch = master
services: docker
env: MYSQL=mysql:8.0
before_install:
- source dev/linux-mysql
- source dev/linux-prereqs
script:
- LIVE_MYSQL_REQUIRED=1 prove -lr --directives --comments t/mysql.t
- <<: *mysql
env: MYSQL=mysql:5.7
- <<: *mysql
env: MYSQL=mysql:5.6
- <<: *mysql
env: MYSQL=mysql:5.5
- <<: *mysql
env: MYSQL=mariadb:10.4
- <<: *mysql
env: MYSQL=mariadb:10.3
- <<: *mysql
env: MYSQL=mariadb:10.2
- <<: *mysql
env: MYSQL=mariadb:10.1
- <<: *mysql
env: MYSQL=mariadb:10.0
- <<: *mysql
env: MYSQL=mariadb:5.5
有关this build的结束方式(以及许多其他数据库测试)。