使用CakePHP 3的Gitlab CI
我正在使用CakePHP,希望从使用Gitlab的CI中获益。 我在使用CakePHP 3的Gitlab CI,php,gitlab,cakephp-3.0,gitlab-ci,Php,Gitlab,Cakephp 3.0,Gitlab Ci,我正在使用CakePHP,希望从使用Gitlab的CI中获益。 我在config/app.php中有此的配置: /** * The test connection is used during the test suite. */ 'test' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql'
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/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
因此,在.gitlab-ci.yml文件中,使用
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'),
因此,您要么必须在某个地方定义环境变量(MYSQL\u USER、MYSQL\u ROOT\u PASSWORD、MYSQL\u DATABASE)(这在项目的gitlab pipelines设置中是可能的),要么设置与.gitlab ci.yml中的数据库设置相匹配的默认值。我终于找到了答案 我的
.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看起来怎么样?我想没有数据库可以连接……谢谢@TobiasGaertner,我更新了问题。您是否设置了环境变量“MYSQL\u ROOT\u PASSWORD”和“MYSQL\u database”?如果没有,则会失败,因为默认值“mysql\u strong\u password”和“test”与gitlab-ci.yml.Thank@TobiasGaertner中的设置不匹配。但是,除了在Gitlab CI文件中,我还需要其他设置吗?