Gitlab CI с CakePHP 3
Я использую CakePHP и хочу получить выгоду от CI с помощью Gitlab. У меня есть конфиг для .gitlab-ci.yml
с этим в config/app.php
:
/**
* The test connection is used during the test suite.
*/
'test' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => env('MYSQL_HOST', 'localhost'),
//'port' => 'non_standard_port_number',
'username' => env('MYSQL_USER', 'root'),
'password' => env('MYSQL_ROOT_PASSWORD', 'mysql_strong_password'),
'database' => env('MYSQL_DATABASE', 'test'),
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
'log' => false,
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
//'url' => env('DATABASE_TEST_URL', null),
],
Но, к сожалению, мои тесты не проходят постоянно.
.Exception: Невозможно вставить фикстуры для тестового случая "App\Test\TestCase\Controller\CategoriesControllerTest". SQLSTATE[HY000] [2002] Нет такого файла или каталога в [/builds/koffisani/gabways-web/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureManager.php, строка 358] ОШИБКА: задание не выполнено: код выхода 1
Мне нужна небольшая помощь для прогресса.
Обновить:
Конфигурация Gitlab CI:
image: kaffineaddict/gitlabcakephp3
# Cache the vendor folder
cache:
paths:
- vendor/
before_script:
# Install git to clone your repository
- apt-get update -yqq
- apt-get install git libcurl4-gnutls-dev libicu-dev libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev -yqq
- docker-php-ext-install mbstring mcrypt pdo_mysql curl json intl gd xml zip bz2 opcache
# Install composer
- curl -sS https://getcomposer.org/installer | php
# Install all project dependencies
- composer install
services:
- mysql
variables:
# Configure mysql service (https://hub.docker.com/_/mysql/)
# We will need to use these in the app.php test datasource
MYSQL_DATABASE: test_myapp
MYSQL_ROOT_PASSWORD: secret
# Run the phpunit tests
All:
script:
- cp config/app.default.php app.php
- vendor/bin/phpunit
1 ответ
Я наконец понял это.
мой .gitlab-ci.yml
Файл содержит этот блок:
variables:
# Configure mysql service (https://hub.docker.com/_/mysql/)
# We will need to use these in the app.php test datasource
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: mysql_strong_password
MYSQL_HOST: mysql
И app.php
Структура данных раздела выглядит следующим образом:
'test' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'mysql',
//'port' => 'non_standard_port_number',
'username' => 'root',
'password' => 'mysql_strong_password',
'database' => 'test',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
'log' => false,
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
'url' => env('DATABASE_TEST_URL', null),
],
И все прошло хорошо. Это может кому-то помочь.
Таким образом, в вашем файле.gitlab-ci.yml вы определяете mysql-service-container с помощью
database: test_myapp
password: secret
user: root (this is default)
В вашем config/app.php вы определяете тестовую базу данных, которую тест должен использовать следующим образом:
'username' => env('MYSQL_USER', 'root'),
'password' => env('MYSQL_ROOT_PASSWORD', 'mysql_strong_password'),
'database' => env('MYSQL_DATABASE', 'test'),
Поэтому вам нужно либо где-нибудь определить env-переменные (MYSQL_USER, MYSQL_ROOT_PASSWORD, MYSQL_DATABASE) (это возможно в настройках конвейеров gitlab для вашего проекта), либо установить значения по умолчанию, соответствующие настройкам базы данных, из вашего.gitlab-ci.yml.