为了在 Gitlab CI 中使用 Playwright 运行端到端测试,我在之前的工作中构建了应用程序所需的 docker 容器:
在 e2e 工作中,我使用容器作为服务:
e2e_tests:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH)
stage:
e2e_test
needs:
- build_api_dev
- build_frontend_dev
image:
name: mcr.microsoft.com/playwright:v1.47.2-noble
services:
- name: mysql:8.0.32
alias: database
- name: schickling/mailcatcher
alias: mailcatcher
- name: $CI_REGISTRY_IMAGE:api-dev-$CI_COMMIT_SHA
alias: api
- name: $CI_REGISTRY_IMAGE:api-nginx-dev-$CI_COMMIT_SHA
alias: nginx
- name: $CI_REGISTRY_IMAGE:frontend-dev-$CI_COMMIT_SHA
alias: frontend
variables:
MYSQL_DATABASE_NAME: symfony
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
MYSQL_DATABASE: symfony_test
DB_HOST: localhost
DB_USER: $MYSQL_ROOT_PASSWORD
DB_PASSWORD: $MYSQL_ROOT_PASSWORD
DB_DATABASE: $MYSQL_DATABASE
FRONTEND_URL: http://localhost:3000
REACT_APP_PUBLIC_API_URL: http://localhost
script:
- mysql -h database -u root -proot <<< "SET GLOBAL sql_mode = '';"
- mysql -h database -u root -proot symfony < db/dump-latest.sql
- cd e2e
- npm install
- npm run test
artifacts:
name: "e2e-tests Report $CI_MERGE_REQUEST_TITLE"
paths:
- e2e/playwright-report/
expire_in: 1 week
无法建立数据库连接,我看到以下错误:
SQLSTATE[HY000] [2002] No such file or directory
当我在本地(在 docker-compose 中)运行容器时,它使用相同的数据库映像。
有什么特殊配置需要吗?
错误 在
SQLSTATE[HY000] [2002]
中,尝试使用 Unix 套接字而不是 TCP 连接连接到数据库的程序通常是导致错误“没有这样的文件或目录”的原因。 GitLab 持续集成要求您与主机名(在本例中为 database
)和端口(对于 MySQL 为 3306
)建立连接,以便服务能够通过网络运行。
更改
DB_HOST
变量以使用服务别名而不是 localhost
来解决此问题:
variables:
DB_HOST: database