运行 gitlab 中的单元测试 CI 连接到真实数据库
Run Unit Tests in gitlab CI connecting to a real database
我想 运行 在 Gitlab CI 上进行单元测试。我正在使用 nodejs,开玩笑,mysql。我正在尝试 运行 mysql 在 CI 上连接到同一台服务器,同时 运行 进行单元测试。为了简单起见,我也插入了一些虚拟数据。
当我 运行 在本地进行测试时,测试 运行 出现了一些错误,但测试通过了一些 post 运行 错误。但是,在 gitlab CI 上,测试脚本无法连接到 mysql 服务。
以下是我的gitlab-ci.yml
services:
- mysql:8.0
variables:
MYSQL_DATABASE: test_database
MYSQL_ROOT_PASSWORD: root
stages:
- build
build:
stage: build
services:
- mysql
only:
refs:
- master
image: klvenky/node-12-alpine-docker:latest
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .yarn
script:
- yarn config set cache-folder $PWD/.yarn
- export FROM_GIT_URL="git.ssh://git"
- export TO_GIT_URL="https://gitlab-ci-token:$CI_JOB_TOKEN"
- sed -i "s#$FROM_GIT_URL#$TO_GIT_URL#" package.json yarn.lock
- yarn --ignore-optional --pure-lockfile --prefer-offline
- yarn test
我的 Repo 托管在 Gitlab here 上。
请让我知道出了什么问题。
您管道中有关 mysql 的错误消息指出:
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
节点包 mysqljs
不支持 MySQL 8.
的默认身份验证方法
您可以找到答案和可能的解决方案。
gitlab-ci 文件中的服务定义也有问题。正如评论中提到的那样,您已经两次使用相同的名称指定服务。只定义一次(使用正确的命令替换)应该有效:
services:
- mysql:8.0
alias: mysql
command: [ "--default-authentication-plugin=mysql_native_password" ]
variables:
MYSQL_DATABASE: test_database
MYSQL_ROOT_PASSWORD: root
stages:
- build
build:
stage: build
only:
refs:
- master
image: klvenky/node-12-alpine-docker:latest
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .yarn
script:
- yarn config set cache-folder $PWD/.yarn
- export FROM_GIT_URL="git.ssh://git"
- export TO_GIT_URL="https://gitlab-ci-token:$CI_JOB_TOKEN"
- sed -i "s#$FROM_GIT_URL#$TO_GIT_URL#" package.json yarn.lock
- yarn --ignore-optional --pure-lockfile --prefer-offline
- yarn test
我想 运行 在 Gitlab CI 上进行单元测试。我正在使用 nodejs,开玩笑,mysql。我正在尝试 运行 mysql 在 CI 上连接到同一台服务器,同时 运行 进行单元测试。为了简单起见,我也插入了一些虚拟数据。
当我 运行 在本地进行测试时,测试 运行 出现了一些错误,但测试通过了一些 post 运行 错误。但是,在 gitlab CI 上,测试脚本无法连接到 mysql 服务。
以下是我的gitlab-ci.yml
services:
- mysql:8.0
variables:
MYSQL_DATABASE: test_database
MYSQL_ROOT_PASSWORD: root
stages:
- build
build:
stage: build
services:
- mysql
only:
refs:
- master
image: klvenky/node-12-alpine-docker:latest
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .yarn
script:
- yarn config set cache-folder $PWD/.yarn
- export FROM_GIT_URL="git.ssh://git"
- export TO_GIT_URL="https://gitlab-ci-token:$CI_JOB_TOKEN"
- sed -i "s#$FROM_GIT_URL#$TO_GIT_URL#" package.json yarn.lock
- yarn --ignore-optional --pure-lockfile --prefer-offline
- yarn test
我的 Repo 托管在 Gitlab here 上。 请让我知道出了什么问题。
您管道中有关 mysql 的错误消息指出:
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
节点包 mysqljs
不支持 MySQL 8.
您可以找到答案和可能的解决方案
gitlab-ci 文件中的服务定义也有问题。正如评论中提到的那样,您已经两次使用相同的名称指定服务。只定义一次(使用正确的命令替换)应该有效:
services:
- mysql:8.0
alias: mysql
command: [ "--default-authentication-plugin=mysql_native_password" ]
variables:
MYSQL_DATABASE: test_database
MYSQL_ROOT_PASSWORD: root
stages:
- build
build:
stage: build
only:
refs:
- master
image: klvenky/node-12-alpine-docker:latest
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .yarn
script:
- yarn config set cache-folder $PWD/.yarn
- export FROM_GIT_URL="git.ssh://git"
- export TO_GIT_URL="https://gitlab-ci-token:$CI_JOB_TOKEN"
- sed -i "s#$FROM_GIT_URL#$TO_GIT_URL#" package.json yarn.lock
- yarn --ignore-optional --pure-lockfile --prefer-offline
- yarn test