mysql - Gitlab CI黄昏 - MySQL连接被拒绝
问题描述
这被问了好几次了,但我尝试了每一个解决方案,我发现并运行了一个具有类似设置的“正常”PHPUnit 测试,所以并不是我所做的一切都可能是错误的。
那么问题来了:
我知道这个问题的主要(仅报告?)原因与 Gitlab CI 和 docker 结合使用的是错误的主机。几乎在每种情况下,OP 都尝试使用某种 localhost 来访问数据库。
这不可能是这种情况,因为DB_HOST
在我的variables
,DB_HOST
在我的.env
文件中和我的 mysql 服务的别名都是一样的。
我什至连接到容器中(通过sleep 1h
在黄昏命令之前添加 a 并执行 a 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>
解决方案
它现在确实有效。
这是我的文件现在的样子:
.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
我想,它缺少文件MYSQL_PASSWORD
中的变量,.yml
但我不是 100% 确定。很高兴它现在可以工作。
推荐阅读
- php - CLI 和 Apache() 上 exec() 的区别
- angular - 如何正确使用 PrimeNG 的 Dropdown
- numpy - 3D 绘图未显示
- python - 20 个新闻组数据集包含大约 18000 个新闻组帖子,而 sklearn 只加载了大约一半的数据集,这是为什么呢?
- javascript - 如何根据查询更新 Firestore 上的文档
- c# - JSON:API 规范与使用 NewtonSoft 序列化对象
- c++ - 调用重载的构造函数会产生歧义错误 C++
- git - 从 Jenkins 运行 Katalon Studio 时构建失败
- c++ - 具有指针和节点嵌套类的树结构中的内存泄漏
- python - 在python的一行中声明多个变量