Я отвечу на свой вопрос, но я открыт для других подходов.
Решение
Следующее решение основано на .travis.yml из проекта PyMySQL: https://github.com/PyMySQL/PyMySQL/blob/master/.travis.yml
Вам нужна комбинация скрипта и конфигурации .travis.yml.
Сценарий
Если вы хотите повторно использовать следующий код, используйте следующий путь в вашем проекте: .travis / install-and-init-db.sh
Следующий скрипт устанавливает базу данных в требуемой версии:
# debug
set -x
# verbose
set -v
if [ ! -z "${DB}" ]; then
# disable existing database server in case of accidential connection
sudo service mysql stop
docker pull ${DB}
docker run -it --name=mysqld -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 ${DB}
sleep 10
mysql() {
docker exec mysqld mysql "${@}"
}
while :
do
sleep 5
mysql -e 'select version()'
if [ $? = 0 ]; then
break
fi
echo "server logs"
docker logs --tail 5 mysqld
done
mysql -e 'select VERSION()'
if [ $DB == 'mysql:8.0' ]; then
WITH_PLUGIN='with mysql_native_password'
mysql -e 'SET GLOBAL local_infile=on'
docker cp mysqld:/var/lib/mysql/public_key.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/ca.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/server-cert.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/client-key.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/client-cert.pem "${HOME}"
else
WITH_PLUGIN=''
fi
mysql -uroot -e 'create database testdb DEFAULT CHARACTER SET utf8mb4'
else
cat ~/.my.cnf
mysql -e 'select VERSION()'
mysql -e 'create database testdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;'
fi
.travis.yml
Вы должны использовать матрицу-> включить блок. Для PHP см. Следующий код. В упомянутом PyMySQL вы найдете путь для Python.
sudo: required
language: php
services:
- docker
matrix:
fast_finish: true
include:
#
# Define versions of MySQL and MariaDB to test against.
#
# mysql 5.5
- php: 5.6
env: DB=mysql:5.5
- php: 7.0
env: DB=mysql:5.5
- php: 7.1
env: DB=mysql:5.5
- php: 7.2
env: DB=mysql:5.5
# mysql 5.6
- php: 5.6
env: DB=mysql:5.6
# ...
# mariadb 10.0
- php: 5.6
env: DB=mariadb:10.0
- php: 7.0
env: DB=mariadb:10.0
- php: 7.1
env: DB=mariadb:10.0
- php: 7.2
env: DB=mariadb:10.0
# ...
before_script:
#
# install and init database (see matrix => include => env)
#
- ./.travis/install-and-init-db.sh
#
# setup and run tests
#
# Install composer packages, will also trigger dump-autoload
- travis_retry composer install --no-interaction
script:
- vendor/bin/phpunit --coverage-clover gen/coverage/clover.xml
Создание и использование соединения
Используйте следующий параметр для создания соединения с сервером базы данных:
$dbConfig = array(
'db_name' => 'testdb',
'db_user' => 'root',
'db_pwd' => '',
'db_host' => '127.0.0.1',
);