Npm 使用GitLab CI/CD管道,如何在Docker托管的数据库前端运行Cypress测试?

Npm 使用GitLab CI/CD管道,如何在Docker托管的数据库前端运行Cypress测试?,npm,docker-compose,continuous-integration,gitlab,cypress,Npm,Docker Compose,Continuous Integration,Gitlab,Cypress,我正在使用Vue.js构建我的第一个web应用程序,我正在使用Docker虚拟化我的服务器端MySQL数据库,以便在开发时为用户提供一个简单的云保存选项。我还使用Cypress在前端运行E2E测试,包括可能的用户与DB的交互,或者更确切地说是与API的交互,然后API向DB发送相应的请求。我现在要做的是创建一个GitLab管道,自动运行Cypress测试,这需要运行Docker DB 在本地运行我的应用程序时,我会执行以下步骤: 我使用Docker-compose.yml在终端中通过Docker

我正在使用Vue.js构建我的第一个web应用程序,我正在使用Docker虚拟化我的服务器端MySQL数据库,以便在开发时为用户提供一个简单的云保存选项。我还使用Cypress在前端运行E2E测试,包括可能的用户与DB的交互,或者更确切地说是与API的交互,然后API向DB发送相应的请求。我现在要做的是创建一个GitLab管道,自动运行Cypress测试,这需要运行Docker DB

在本地运行我的应用程序时,我会执行以下步骤:

我使用Docker-compose.yml在终端中通过Docker compose up运行我的3个Docker containers Node.js API、MySQL DB和PHP Adminer。 我通过npm run serve在开发模式下运行我的应用程序。 现在Docker容器和应用程序正在运行,我也可以使用npm成功运行Cypress测试。 现在我想在.gitlab-ci.yml中自动化整个过程。我能够构建应用程序并运行Cypress测试,但在运行Cypress之前,我不知道如何运行Docker容器,以便我的测试能够与虚拟数据库进行交互。我只是尝试在调用Cypress之前将docker compose up命令添加到脚本中,但是管道失败了,因为它不知道该命令。然后,我阅读了关于如何将docker compose导入管道的不同指南,但还没有任何效果

在尝试这些失败的指南之前,我的yml文件如下所示:

image: cypress/base:10

stages:
  - test
  - build

cache:
  paths:
    - node_modules/

run_cypress:
  stage: test
  script:
    - cd docker
    - docker-compose up
    - cd ../code
    - npm install
    - npm run cypress:open
  artifacts:
    expire_in: 1 week
    when: always
    paths:
      - [redacted]

build_code:
  stage: build
  script:
    - cd code
    - npm install
    - npm run build
正如我所说,这个脚本在docker compose up行失败,但在没有它的情况下运行正常。这些测试也可以使用定制的cypress:open脚本正确执行,但大多数测试都失败了,因为没有Docker,数据库当然不会真正运行。那么,为了让脚本知道docker compose并让它在执行测试之前正确运行docker,我需要添加或更改什么呢?

您需要使用gitlab/dind image。不是柏树/底座:10

我知道它不是docker compose,因为cypress/base:10不支持docker中的docker,所以类似这样的东西

图片:gitlab/dind run_cypress: 阶段:测试 脚本: -docker拉$CONTAINER\u提交\u图像 - > 码头工人赛跑 -p 80:3000 -d$CONTAINER\u COMMIT\u映像 - > docker run-net=host$CONTAINER\u COMMIT\u IMAGE/bin/bash-c npm安装和npx cypress运行 您需要使用gitlab/dind映像。不是柏树/底座:10

我知道它不是docker compose,因为cypress/base:10不支持docker中的docker,所以类似这样的东西

图片:gitlab/dind run_cypress: 阶段:测试 脚本: -docker拉$CONTAINER\u提交\u图像 - > 码头工人赛跑 -p 80:3000 -d$CONTAINER\u COMMIT\u映像 - > docker run-net=host$CONTAINER\u COMMIT\u IMAGE/bin/bash-c npm安装和npx cypress运行 你已经跟着了吗?你已经跟着了吗?