运行 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