Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CakePHP 3的Gitlab CI_Php_Gitlab_Cakephp 3.0_Gitlab Ci - Fatal编程技术网

使用CakePHP 3的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'

我正在使用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',
        '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文件中,我还需要其他设置吗?