Gitlab CI dusk - отказано в соединении с MySQL - PullRequest
0 голосов
/ 15 декабря 2018

Об этом спрашивали несколько раз, но я попробовал каждое решение, нашел и запускаю «нормальный» тест PHPUnit с похожей настройкой, поэтому не все, что я делаю, может быть ошибочным.

Ну вот в чем проблема:
Я знаю, что основная (только сообщаемая?) Причина этой проблемы в сочетании с Gitlab CI и докером использует неверный хост.Практически в каждом случае OP пытался использовать своего рода локальный хост для доступа к БД.
Здесь такого не может быть, потому что DB_HOST в моем variables, DB_HOST в моем .env файле и псевдонимемоего сервиса MySQL все одинаковы.

Я даже подключился к контейнеру (добавив sleep 1h прямо перед командой dusk и выполнив docker exec), успешно вошел в мою базу данных и увидел перенесенные и заполненные таблицы.Тинкер тоже работает.
Единственная проблема - сумрак.
Забавный факт: сброс моего DB_HOST дает mysql-test (я выполнил config:clear перед запуском заката и даже добавил его в свою функцию setUp.

У меня действительно заканчиваются идеи, и я надеюсь на некоторые идеи из толпы.

Это мой файл .yml

stages:
- build
- test  

variables:
  DB_HOST: mysql-test
  MYSQL_DATABASE: laravel
  MYSQL_ROOT_PASSWORD: secret
  DB_CONNECTION: mysql

composer:
  image: lorisleiva/laravel-docker:latest
  stage: build
  script:
  - composer install --no-progress --no-interaction
  - cp .env.gitlab-testing .env
  - php artisan key:generate
  artifacts:
    paths:
    - vendor/
    - bootstrap/
    - .env
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - vendor/
  tags:
  - docker

npm:
  image: lorisleiva/laravel-docker:latest
  stage: build
  script:
  - npm install
  - npm run prod
  artifacts:
    paths:
    - public/mix-manifest.json
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - node_modules/
  tags:
  - docker  

dusk:
  stage: test
  dependencies:
  - composer
  - npm
  tags:
  - docker
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - vendor
    - node_modules
    policy: pull

  services:
  - name: mysql:5.7
    alias: mysql-test

  image: chilio/laravel-dusk-ci:latest
  script:
  - cp .env.dusk.gitlab-testing .env
  - cp phpunit.dusk.xml phpunit.xml 
  - configure-laravel
  - start-nginx-ci-project
  - php artisan dusk --colors --debug

  artifacts:
    paths:
    - ./storage/logs 
    - ./tests/Browser/screenshots
    - ./tests/Browser/console
    expire_in: 7 days
    when: always

.env.dusk.gitlab-testing

APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

LOG_CHANNEL=stack
HEADLESS=true

DB_CONNECTION=mysql
DB_HOST=mysql-test
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=array
SESSION_DRIVER=array
QUEUE_DRIVER=sync

phpunit.dusk.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Browser Tests">
            <directory suffix="Test.php">./tests/Browser</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="local"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>

1 Ответ

0 голосов
/ 17 марта 2019

Теперь это действительно работает.
Вот как теперь выглядят мои файлы:
.env.dusk.gitlab-testing:

APP_ENV=local
APP_KEY=base64:WY4y4XWUAKbCPzf8XqC92z5wWMn7oOHXZMFMbg9al3E=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=mysql-test
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=array
SESSION_DRIVER=array
QUEUE_DRIVER=sync

.gitlab-ci.yml

stages:
- build
- test
- deploy

# Variables
variables:
  DB_HOST: mysql-test
  MYSQL_DATABASE: laravel
  MYSQL_USER: laravel
  MYSQL_PASSWORD: secret
  MYSQL_ROOT_PASSWORD: secretroot
  DB_CONNECTION: mysql

composer:
  image: lorisleiva/laravel-docker:latest
  stage: build
  script:
  - cp .env.gitlab-testing .env
  - composer install --no-progress --no-interaction
  - php artisan key:generate
  artifacts:
    paths:
    - vendor/
    - bootstrap/
    - .env
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - vendor/
    - bootstrap/
  tags:
  - docker

npm:
  image: lorisleiva/laravel-docker:latest
  stage: build
  script:
  - npm install
  - npm run prod
  artifacts:
    paths:
    - public/mix-manifest.json
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - node_modules/
  tags:
  - docker

phpunit:
  image: lorisleiva/laravel-docker:latest
  stage: test
  services:
  - name: mysql:5.7
    alias: mysql-test
  - redis:latest
  artifacts:
    when: always
    paths:
    - storage/logs/
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - vendor/
    - node_modules/
    policy: pull
  dependencies:
  - composer
  - npm
  script:
  - php artisan migrate
  - php artisan db:seed --class=TestingSeeder
  - php vendor/bin/phpunit --coverage-text --colors
  tags:
  - docker

dusk:
  stage: test
  cache:
    key: ${CI_BUILD_REF_NAME}
    paths:
    - vendor/
    - node_modules/
    policy: pull

  services:
  - name: mysql:5.7
    alias: mysql-test

  image: chilio/laravel-dusk-ci:stable
  tags:
  - docker
  script:
  - cp .env.dusk.gitlab-testing .env
  - configure-laravel
  - composer dump-autoload
  - start-nginx-ci-project
  - php artisan dusk --colors

  artifacts:
    paths:
    - ./storage/logs # for debugging
    - ./tests/Browser/screenshots
    - ./tests/Browser/console
    expire_in: 7 days
    when: always

Я предполагаю, что в файле .yml отсутствует переменная MYSQL_PASSWORD, но я не уверен на 100%.Просто рад, что это работает сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...