Gitlab CI 与 CakePHP 3

Gitlab CI with CakePHP 3

我正在使用 CakePHP,并希望从 CI 使用 Gitlab 中获益。 我在 config/app.php:

中有 .gitlab-ci.yml 的配置
/**
     * 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: Unable to insert fixtures for "App\Test\TestCase\Controller\CategoriesControllerTest" test case. SQLSTATE[HY000] [2002] No such file or directory in [/builds/koffisani/gabways-web/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureManager.php, line 358] ERROR: Job failed: exit code 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 文件中,您使用

定义了一个 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'),

所以你要么必须在某处定义环境变量(MYSQL_USER、MYSQL_ROOT_PASSWORD、MYSQL_DATABASE)(这可能在你项目的 gitlab 管道设置中)或者你设置默认值与 .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),
    ],

一切都很顺利。它可能对某人有帮助。